这个程序的目的是确保输入的两个0到2之间的整数是有效的,中间有一个空格(严格地说,没有别的),然后把这两个整数的结果赋给变量,由于某种原因,这是不允许的。
非常基本的类型转换让我感到困惑。print语句%i and %i
从来没有运行过!我不明白为什么,即使我在标记为“success”的部分用大括号括起来。我已经尝试了很多方法。
#include <stdio.h>
#include <string.h>
int main(void)
{
int row, column;
char buffer[100];
}
printf("enter 2 values of row | column format \n");
fgets(buffer,100,stdin);
sscanf(buffer,"%c %c",&row, &column);
printf("%i %i", row,column);
// only accepts integers between 0 and 2 inclusive
if ((((int)row >=48) && ((int)row <= 50 )) && ((int)column >= 48) && ((int)column <= 50))
{
printf("success\n");
printf("%i and %i", atoi(row), atoi(column));
}
else
printf("fail\n");
return 0;
}
2条答案
按热度按时间xzlaal3s1#
很好,OP正在尝试验证输入。
要接受2
int
:然后测试范围
检测
int
的超出范围文本所需的附加代码。类似于下面的代码,它将int
的输入限制为每个1位数,并记录两个int
之间的扫描偏移以确保一些空白。保存时间
启用所有编译器警告。一个好的编译器会抱怨
sscanf(buffer,"%c %c",&row, &column);
-"%c"
需要char *
,而不是int *
。xqnpmsa82#
远离
scanf()
系列的函数。它们是这么多SO问题的原因...下面的内容应该很容易理解,当你醒来的时候,我很乐意为你解释任何你可能感到困惑的事情。