gpt4 book ai didi

c - 当第一个路径失败时,为什么我不能再次对同一个变量使用 scanf

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

请看下面的代码:

#include <stdio.h>

int main(int argc, char const *argv[])
{
int n;
int i = scanf("%d", &n);
printf("%d\n", i);
int j = scanf("%d", &n);
printf("%d\n", j);
return 0;
}

假设我第一次输入字符串nscanf会返回0;但是,为什么它不允许我第二次输入 n 的值并且 j 是自动的 0?我应该怎么做才能让它允许我再次输入 n 的值,即使我第一次输入了错误的值?

最佳答案

您几乎可以肯定输入了一个非数字值,这将导致第一个 scanf 失败,返回零并且(这是重要的一点)将流指针准确地留在何处它在 scanf 调用之前。

这意味着您下一次调用它时,它只会尝试读取相同数据。

零的返回值是一个死的赠品 - scanf 返回成功扫描的项目数,所以零意味着你没有给它一个数字。

如果您输入数字,它工作正常,按照以下代码:

#include <stdio.h>

int main(int argc, char const *argv[])
{
int n;
int i = scanf("%d", &n);
printf(">> %d %d\n", i, n);
int j = scanf("%d", &n);
printf(">> %d %d\n", j, n);
return 0;
}

当您运行它并输入 4132 时,您会看到:

41
>> 1 41
32
>> 1 32

每个 C 程序员在其职业生涯的某个阶段都会遇到该语言中用户输入的不足之处。对于基于行的输入,最好的办法是简单地找到一个能很好地完成它的函数,然后对结果字符串使用 sscanf

确保行是基本单位,可以处理缓冲区溢出并确保多余的数据不会“破坏” future 的输入。

Here's one我提前准备了。

关于c - 当第一个路径失败时,为什么我不能再次对同一个变量使用 scanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26478931/

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