如何确保用户只输入一个整数值,这样程序就不会崩溃?
如果用户输入的不是整数,我想:printf("请重新检查您的输入);
printf("How many values do you want to enter? t");
int g;
scanf("%d", &g);
我想说,检查scanf:的返回值
这些函数返回成功匹配和分配的输入项的数量,该数量可以少于所提供的数量,甚至在早期匹配失败的情况下为零。
如果在第一次成功转换或匹配失败发生之前达到输入结束,则返回值EOF。如果发生读取错误,也会返回EOF,在这种情况下,会设置流的错误指示器(请参见ferror(3)),设置errno表示错误。
我想说的是,您必须进行一些自定义验证,以检查scanf
是否读取整数。
此外,我建议使用fgets
(在scanf()
中没有边界检查)
你可以做一些类似的事情
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
int validate ( char *a )
{
unsigned x;
for ( x = 0; x < strlen ( a ); x++ )
if ( !isdigit ( a[x] ) ) return 1;
return 0;
}
int main ( void )
{
int i;
char buffer[BUFSIZ];
printf ( "Enter a number: " );
if ( fgets ( buffer, sizeof buffer, stdin ) != NULL ) {
buffer[strlen ( buffer ) - 1] = ' ';
if ( validate ( buffer ) == 0 ) {
i = atoi ( buffer );
printf ( "%dn", i );
}
else
printf ( "Error: Input validationn" );
}
else
printf ( "Error reading inputn" );
return 0;
}
试试这样的东西-
#include<stdio.h>
int main()
{
int num;
printf("Enter the numbern");
if((scanf("%d",&num)) == 1){ // checking return value of scanf here!
printf(": %dn",num);
// do your stuff here
}
else
printf("Please recheck your input!n");
return 0;
}
这里,如果输入正确读取并分配了scanf
,则返回1,否则返回0。
样本输出-
root@sathish1:~/My Docs/Programs# ./a.out
Enter the number
2
: 2
root@sathish1:~/My Docs/Programs# ./a.out
Enter the number
asd
Please recheck your input!