gpt4 book ai didi

C: 有一个变量输入错误,我的 "incorrect input"if 启动并且不让用户完成其余变量的输入

转载 作者:太空宇宙 更新时间:2023-11-04 03:15:06 25 4
gpt4 key购买 nike

问题基本上是,如果用户输入 a:5、b:f,一切正常。但如果是相反的方式并向“a”变量输入一个字母,则程序结束时会说“输入不正确”,而不是让用户完成其余变量的输入。为什么?是因为我如何处理检查输入是否正确?如何“延迟”消息并在用户完成输入变量后显示?

代码如下:

#include <stdio.h>

int main(void) {

short int l1=0, l2=0, l=0;
int a=0, b=0;

printf("Is number 'a' divisible by number 'b'?\n");
printf("Number a: ");
l1 = scanf("%d", &a);
printf("Number b: ");
l2 = scanf("%d", &b);

l=l1+l2;

if (l<2)
{
printf("Incorrect input");
return 1;
}
else if (b==0)
{
printf("Operation not permitted");
return 1;
}
else if (a%b)
{
printf("%d is not divisible by %d", a, b);
}
else printf("%d is divisible by %d", a, b);

return 0;
}

最佳答案

正如 Weather Vane 已经指出的那样,程序退出的原因是,当您输入一个字符 (%c) 并且 scanf 函数正在等待一个整数 (%d) 时,它会忽略该字符,找不到int 但在 '\n'(输入)上结束搜索,因此您的变量 l1 保持为 0。您的所有 scanf 调用都会发生这种情况,因为它不会清除缓冲区中的字符不匹配。

解决这个问题


您可以清除输入缓冲区,以便所有其他 scanf 调用可以获得实际输入,但是,您仍然会在最后得到“不正确的输入”。

printf("Number a: ");
l1 = scanf("%d", &a);
while (getchar() != '\n');

printf("Number b: ");
l2 = scanf("%d", &b);
while (getchar() != '\n');

如果您想重复输入过程直到用户正确输入数字,您必须在 while 循环中检查 scanf 的返回值,如下所示:

do {
printf("Number a: ");
l1 = scanf("%d", &a);
while (getchar() != '\n');
} while (l1 != 1 || l1 != EOF);

关于C: 有一个变量输入错误,我的 "incorrect input"if 启动并且不让用户完成其余变量的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52801153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com