| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2005 人关注过本帖
标题:判断输入的数为整数
只看楼主 加入收藏
my591282557
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-1-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
判断输入的数为整数
/*以下是我自己写的课程设计题目,要求不能用系统的库函数实现字符串的各项处理,包括:复制,连接,比较等,程序以菜单方式工作,远行时出理一点小问题。在执行do-while循环时,要求输入自己的选择,如果输入的不是数字就出现了死循环,而我希望的是,如果输入的不是数字,则重新输入。在网上搜了,自己也尝试解决,实在解决不了,请各位帮帮忙*/
#include<stdio.h>
#define N 40
#define M 20
void menu();                 
void getlength(char *a);
void compare(char *a,char *b);
int flag(char *s1,char *s2 );
void copy(char *to,char *form);
int search(char string[],char c);        
void sort(char *string);         
char *connect(char *string,char *s);            
main()
{
 char c,string[N],b[M];
 char *s,*ps=string,*pb=b;
 int i,position;
 printf("请输入字符串:\n");
 gets(ps);
 do
 {
  menu();
  scanf("%d",&i);                              //运行时,如果输入的是字母,程序就死循环,
  switch(i)
  {
  case 1:{
     getlength( ps ) ;
     printf( "------The string is:------\n" ) ;
     printf( "\t%s\n",ps ) ;
     break;
      }
  case 2:{
     printf( "输入要比较的字符串:\n" ) ;
     scanf( "%s",pb ) ;
     compare( ps,b ) ;
     printf( "------The string is:------\n" ) ;
     printf( "\t%s\n",ps ) ;
     break ;
      }
  case 3:{
     printf( "输入要查找的字符:\n" ) ;
     getchar( ) ;
     scanf( "%c",&c ) ;
     position = search( ps,c ) ;
     if( position )
     {
      printf( "The position of '%c' is:%d\n",c,position ) ;
     }
     else
      printf( "Sorry! The word '%c'is not in string\n",c ) ;
     printf( "------The string is:------\n" ) ;
     printf( "\t%s\n",ps ) ;
     break ;
      }
  case 4:{
     sort( ps ) ;
     printf( "After sort string[]=%s\n",ps ) ;
     printf( "------Before sort the string is:------\n" ) ;
     printf( "\t%s\n",ps ) ;
     break ;
     
      }
  case 5:{
     printf( "请输入要连接的字符串:\n" ) ;
     scanf( "%s",pb ) ;
     s = connect( ps,pb ) ;
     printf( "%s\n",s ) ;
     printf( "------The string is:------\n" ) ;
     printf( "\t%s\n",ps ) ;
     break ;
      }
  case 6:{
     printf( "------The string is:------\n" ) ;
     printf( "\t%s\n",ps ) ;
     printf( "输入要拷贝的字符串:\n" ) ;
     scanf( "%s",pb ) ;
     copy( ps,b ) ;
     printf( "After copy string[]=%s\n",ps ) ;
     break ;
      }
  case 7: printf( "程序结束 !\n" ) ; break ;
  default: printf( "请重新输入:\n" ) ;
  }
 } while(i!=7) ;
}
void getlength( char *string )         //求字符串的长度
{
 int i ;
 for(i = 0 ; *string != '\0' ; string++,i++)
  ;
 printf( "The length of the string is:%d\n",i ) ;
}   
void compare( char *s1 , char *s2  )   //字符串的比较
{
 int index;
 index = flag( s1,s2 ) ;
 printf( "%d\n",index ) ;
 if( index == 1 )
 {
  printf( "index = %d\n",index ) ;
  printf( "s1>s2\n" ) ;
 }
 else if( index == -1 )
 {
  printf( "index = %d\n",index ) ;
  printf( "s1<s2\n" ) ;
 }
 else if( index == 0 )
 {
  printf( "index = %d\n",index ) ;
  printf( "s1 = s2\n" ) ;
 }
}
int flag(char *s1,char *s2 )        //比较的返回值
{
 while( *s1 != '\0' && *s2 != '\0' )
 {
  if( *s1 == *s2 )
  {
   s1++ ; s2++ ;
   continue ;
  }
  if( *s1> *s2 ) return 1 ;
  else
   return -1 ;
 }
 if( *s1 == '\0' )
  if( *s2 == '\0')
   return 0 ;
  else
   return -1 ;
 else
  return 1 ;
}
void copy(char *to,char *from)      //字符串的复制
{
 for( ; *from != 0 ; to++,from++ )
  *to = *from ;
 *to = '\0' ;
}
int search(char string[],char c)    //字符串的查找     
{
 int i,n;
 for(n=0;string[n]!='\0';n++)
  ;
 for(i=0;i<n;i++)
 {
  if(string[i]==c)
  {
   return i+1;
   break;
  }
 }
 return 0;
}
void sort( char *string )        //字符串的排序   
{
 int i,j,n ;
 char temp ;
 for(n = 0 ; string[n] != '\0' ; n++)
  ;
 for( i = 0 ; i <n-1 ; i++ )
  for( j=0;j<n-i-1;j++ )
  {
   if( string[j] > string[j+1] )
   {
    temp = string[j] ;
    string[j] = string[j+1] ;
    string[j+1] = temp ;
   }
  }
}
char *connect( char s1[],char s2[] )
{
 int i,j;
 for(i = 0 ; s1[i] !=0 ; i++ )
 ;
 for( j=0 ; s2[j] != 0 ; i++,j++)
 s1[i] = s2[j] ;
 
 s1[i] = '\0' ;
 return s1 ;  
}
void menu( )                  //系统功能菜单
{
 printf( "★★★★★★★★★★系统功能菜单★★★★★★★★★★\n" ) ;
 printf( "1----------→ StringGetlength←----------\n" ) ;
 printf( "2----------→ String Compare ←----------\n" ) ;
 printf( "3----------→ String Search  ←----------\n" ) ;
 printf( "4----------→ String Sort    ←----------\n" ) ;
 printf( "5----------→ String Connect ←----------\n" ) ;
 printf( "6----------→ String Copy    ←----------\n" ) ;
 printf( "7----------→    Exit        ←----------\n" ) ;
 printf( "Pls give your choice 1-7:\n" ) ;
}
搜索更多相关主题的帖子: void compare include 字符串 
2012-01-15 17:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
你為什麼要%d讀入int i而不是讀入單個字符%c?

[ 本帖最后由 TonyDeng 于 2012-1-15 18:38 编辑 ]

授人以渔,不授人以鱼。
2012-01-15 18:36
my591282557
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-1-15
收藏
得分:0 
回复 2楼 TonyDeng
我去试一下
2012-01-15 18:45
my591282557
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-1-15
收藏
得分:0 
回复 2楼 TonyDeng
这样就可以了,呵呵,是我不疏忽了,谢谢!
2012-01-15 18:51
my591282557
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-1-15
收藏
得分:0 
回复 3楼 my591282557
是我疏忽了!
2012-01-15 18:53
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
現在你知道是怎麼回事了嗎?你用原來的代碼,在switch()之前把scanf()到的i打印出來看看,就明白了。

另外,寫程序時要考慮到,既然scanf(),那麼輸入的主動權在敲鍵盤的那個人手裏,你無法預測他會敲什麼進去,編碼時必須預備對方可能有什麼你不希望的輸入,全都要有預案應對才成。這裡,你看到在需要整數的時候對方敲入字母的情形,但不知道敲入字母時得到了什麼整數i,也不曉得檢查一下這個內容,這才是問題所在。

授人以渔,不授人以鱼。
2012-01-15 18:58
my591282557
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-1-15
收藏
得分:0 
回复 5楼 my591282557
你说的我明白,我注意过了,但没那么仔细,我才刚学不久
2012-01-15 19:02
快速回复:判断输入的数为整数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044505 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved