gpt4 book ai didi

c - scanf 不等待输入返回 0

转载 作者:行者123 更新时间:2023-12-04 12:30:50 25 4
gpt4 key购买 nike

我从来没有用 C 编程过,今天我不得不写一些小代码。程序非常简单——我想添加两个整数。但是当我试图检查给定的输入是否为数字并且第一个 scanf 返回 0 时,第二个 scanf 也返回 0 而无需等待输入。代码:

int main()
{
int a = 0;
int b = 0;
printf("Number a:\n");
if (scanf("%d", &a) != 1)
{
printf("Not a number. a=0!\n");
a = 0;
}
printf("Number b:\n");
if (scanf("%d", &b) != 1)
{
printf("Not a number. b=0!\n");
b = 0;
}
printf("%d\n", a+b);
return 0;
}

最佳答案

第一个 fscanf() 未能转换为数字的输入仍在标准输入的缓冲区中等待,并导致第二个 fscanf() 也失败.尝试丢弃有问题的输入并重新提示用户:

#include <stdio.h>

int main(void) {
int a = 0;
int b = 0;
int c;
printf("Number a:\n");
while (scanf("%d", &a) != 1) {
printf("Not a number, try again:\n");
while ((c = getchar()) != EOF && c != '\n')
continue;
if (c == EOF)
exit(1);
}
printf("Number b:\n");
while (scanf("%d", &b) != 1) {
printf("Not a number, try again:\n");
while ((c = getchar()) != EOF && c != '\n')
continue;
if (c == EOF)
exit(1);
}
printf("%d\n", a + b);
return 0;
}

使用效用函数分解代码使其更清晰:

#include <stdio.h>

int get_number(const char *prompt, int *valp) {
printf("%s:\n", prompt);
while (scanf("%d", valp) != 1) {
printf("Not a number, try again:\n");
while ((c = getchar()) != EOF && c != '\n')
continue;
if (c == EOF)
return 0;
}
return 1;
}

int main(void) {
int a, b;

if (!get_number("Number a", &a) || !get_number("Number b", &b)) {
return 1;
}
printf("%d\n", a + b);
return 0;
}

关于c - scanf 不等待输入返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40511500/

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