在C中读取整数时对字符进行错误检查
在我的编程课上,我写了一个计算除数和的程序。所以我已经到了我的最后一部分,那就是错误检查,如果我读入一个字符,我会遇到问题。我之前在S.O.上搜索过,也试图找出一些答案,但在100之前找不到一个适用于无穷负数的解决方案 当我点击一个字符时,它会将其设置为0,并直接转到末尾,在那里我希望它在读入后退出在C中读取整数时对字符进行错误检查,c,error-checking,C,Error Checking,在我的编程课上,我写了一个计算除数和的程序。所以我已经到了我的最后一部分,那就是错误检查,如果我读入一个字符,我会遇到问题。我之前在S.O.上搜索过,也试图找出一些答案,但在100之前找不到一个适用于无穷负数的解决方案 当我点击一个字符时,它会将其设置为0,并直接转到末尾,在那里我希望它在读入后退出 int main (void){ int userIN=0; int i = 0; int next = 0; int temp= 105; int cycle; puts("Enter up to
int main (void){
int userIN=0;
int i = 0;
int next = 0;
int temp= 105;
int cycle;
puts("Enter up to 10 integers less than or equal to 100");
while(scanf("%d ", &userIN) !=EOF && (i < 10))
{
if(userIN > 100){
printf("Invalid Input\n");
exit(1);
}
else if(userIN < 100)
{
int main(无效){
int userIN=0;
int i=0;
int next=0;
内部温度=105;
整数周期;
输入(“最多输入10个小于或等于100的整数”);
而(scanf(“%d”、&userIN)!=EOF&&(i<10))
{
如果(用户输入>100){
printf(“无效输入\n”);
出口(1);
}
否则如果(用户输入<100)
{
提前谢谢你的帮助
编辑:程序正在正确循环,我的问题是错误检查输入的字符是否与代码本身无关scanf()
如果无法读取格式字符串指定的值,则返回除EOF
以外的值(例如,使用%d
,它会遇到类似foo
)。您可以对此进行检查。需要注意的是,它不会从stdin
读取有问题的数据,因此它仍然会影响下一次调用scanf()
——这可能会导致无限循环(scanf()
报告错误,调用scanf())
同样,它遇到相同的输入,因此报告相同的错误)
您最好使用
fgets()
阅读整行输入。然后手动检查输入或使用sscanf()
(注意名称中的附加s
)。这种方法的优点是更容易避免意外用户输入时出现无限循环。您可以在i
小于10时循环。第一个if将查看scanf是否失败。如果是,输入缓冲区将被清除,while循环将再次尝试。如果捕获EOF,则退出。如果scanf成功,则input与100比较,如果在范围内,则while循环计数器递增。
声明int ch=0;
while ( i < 10) {
printf("Enter %d of 10 integers. (less than or equal to 100)\n", i + 1);
if(scanf(" %d", &userIN) != 1)
{
while ( ( ch = getchar()) != '\n' && ch != EOF) {
//clear input buffer
}
if ( ch == EOF) {
exit ( 1);
}
}
else {
if(userIN > 100){
printf("Invalid Input\n");
}
else
{
i++;// good input advance to the next input
printf("Valid");
}
}
}
while(i<10){
printf(“输入10个整数中的%d(小于或等于100)”,i+1;
如果(scanf(“%d”,&userIN)!=1)
{
而((ch=getchar())!='\n'&&ch!=EOF){
//清除输入缓冲区
}
如果(ch==EOF){
出口(1);
}
}
否则{
如果(用户输入>100){
printf(“无效输入\n”);
}
其他的
{
i++;//良好的输入前进到下一个输入
printf(“有效”);
}
}
}
这看起来不像你的完整代码这不是我的完整代码,这是我遇到问题的地方…当整数用户输入一个字符时读入&userIN时,我只检查大于100的整数时出错。我不想添加我的整个代码,因为这是家庭作业,不想让其他人复制它。你是否初始化了GI归零?