如何在输入字符代替整数时终止程序

  • 本文关键字:整数 终止程序 字符 c
  • 更新时间 :
  • 英文 :


我想验证用户输入。例如,如果我在整数的位置输入一个字符,那么程序应该终止。

使用基本输入验证从用户读取整数的最简单方法如下:

#include <stdio.h>
#include <stdlib.h>
int main( void )
{
int num;
printf( "Enter a number: " );
switch ( scanf( "%d", &num ) )
{
case 1:
//input is valid
break;
case 0:
printf( "That was not a valid number!n" );
exit( EXIT_FAILURE );
default:
printf( "Unexpected input error occurred!n" );        
exit( EXIT_FAILURE );
}
printf( "You entered the following valid input: %dn", num );
}

然而,这个解决方案并不完美,因为它将接受例如6sdfh4q作为数字6的有效输入,尽管该输入可能应该被拒绝。这是因为scanf不是为基于行的用户输入设计的。

对于基于行的用户输入,使用fgets而不是scanf可能更好。与scanf相比,fgets通常一次读取一行,因此它是读取用户输入的完美函数。在读取一行用户输入后,您可以尝试使用strtolsscanf函数将输入转换为数字。

在c中执行完整的输入验证是相当复杂的。我将这样写:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
int main( void )
{
char buffer[1024], *p;
long num;
//prompt user for input
printf( "Enter a number: " );
//get one line of input from input stream
if ( fgets( buffer, sizeof buffer, stdin ) == NULL )
{
fprintf( stderr, "Unrecoverable error reading from input!n" );
exit( EXIT_FAILURE );
}
//make sure that entire line was read in (i.e. that
//the buffer was not too small)
if ( strchr( buffer, 'n' ) == NULL )
{
printf( "Line input was too long!n" );
exit( EXIT_FAILURE );
}
//attempt to convert string to number
errno = 0;
num = strtol( buffer, &p, 10 );
if ( p == buffer )
{
printf( "Error converting string to numbern" );
exit( EXIT_FAILURE );
}
//make sure that no range error occurred
if ( errno == ERANGE )
{
printf( "Range error!n" );
exit( EXIT_FAILURE );
}
//make sure that remainder of line contains only whitespace,
//so that input such as "6sdfh4q" gets rejected
for ( ; *p != ''; p++ )
{
if ( !isspace( (unsigned char)*p ) )
{
printf( "Unexpected input encountered!n" );
exit( EXIT_FAILURE );
}
}
//number was successfully converted, so we print it
printf( "You entered the following valid number: %ldn", num );
}

输入有效数字时的输出示例:

Enter a number: 65
You entered the following valid number: 65

输入无效输入时的输出示例:

Enter a number: 6sdfh4q
Unexpected input encountered!

通常终止程序的方法是调用" exit "函数。

exit(ERROR_CODE);

最新更新