判断输入的数为整数
/*以下是我自己写的课程设计题目,要求不能用系统的库函数实现字符串的各项处理,包括:复制,连接,比较等,程序以菜单方式工作,远行时出理一点小问题。在执行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" ) ;
}