我正在尝试使用scanf()
读取int以便以后进行计算,但我试图让它在int之后丢弃任何内容。
基本上我希望能够提示用户回答诸如
之类的问题什么是3 + 5?
并且用户能够输入8或8只狗或任何具有该性质的东西,并且它们被视为相同。我尝试过使用scanf("%*[^\n]\n");
,但是这会导致其他提示导致程序中的其他问题
无法正确显示。我还应该读取其中的值(本例中为8)用于其他计算,我需要删除狗部分,因为它会在程序中导致问题。
示例代码以澄清评论中的问题
printf("What is %d %c %d ", a, oper, b);
fgets(line, sizeof(line), stdin);
errno = 0;
num = strtol(line, NULL, 10);
if (num == answer)
{
printf("Correct!");
right++;
}
else
{
printf("Wrong!");
}
printf("\n");
if (errno != 0)
{
printf("Invalid input, it must be just a number \n");
}
基本上这部分对用户输入的数学问题进行评分
答案 0 :(得分:2)
尝试以这种方式读取输入时,使用scanf
可能会非常棘手。我建议您使用fgets
整行阅读,然后使用strtol
将结果转换为数字。
char line[100];
long int num;
fgets(line,sizeof(line),stdin);
errno = 0;
num = strtol(line, NULL, 10);
if (errno != 0) {
printf("%s is not a number!\n", line);
}
编辑:
你看起来不错,虽然正如chux在评论中指出的那样,它并没有正确检测到非数值。
这应该这样做:
int main()
{
int a, b, answer, right;;
char oper, *p;
char line[100];
long int num;
right=0;
a=3, b=5, oper='+', answer=8;
printf("What is %d %c %d ", a, oper, b);
fgets(line, sizeof(line), stdin);
errno = 0;
num = strtol(line, &p, 10); // p will point to the first invalid character
if (num == answer)
{
printf("Correct!");
right++;
}
else
{
printf("Wrong!");
}
printf("\n");
if (errno != 0 || p == line)
{
printf("Invalid input, it must be just a number \n");
}
}