gpt4 book ai didi

c - 关于C中的文件输入和输出

转载 作者:行者123 更新时间:2023-11-30 20:14:33 24 4
gpt4 key购买 nike

我通常不会在这里提问,除非我真的陷入困境!我想知道是否有人可以解释为什么我的代码打印出“5 47”。我明白为什么有5,但不明白为什么有47?我查找了空格 (32) 的 ASCII 值,并尝试将第二个字母更改为 e、f、g,但输出保持“5 47”不变。

一般来说,当我使用 fscanf(fp, "%d", &variablename) 时,fscanf 是否会跳过其他字符?例如:在我的文件 test.txt 中,我有“5 hello 6 ben jerry\n”。我如何扫描 5 和 6? fscanf(fp, "%d %d", &test1, &test2) 会扫描 5 和 6,跳过单词“hello”吗?

这是我用来测试输出的简单代码:

int main(int argc, char *argv[]) {
int blah, test;
FILE * fp;
fp = fopen(argv[1], "r");
fscanf(fp, "%d %d", &blah, &test);
printf("%d %d\n", blah, test);
return 0;
}

我用作 argv[1] 内容的文件:

5g

附注FILE *fp 是指向每个字符/数字的实际指针吗?它在扫描文件时是否充当占位符?这就是为什么我们在到达文件末尾时需要rewind(fp)吗?

最佳答案

运算符 %d 查找整数,而不是字符。因为 g 是一个字符,而不是一个整数,所以 %d 会变得困惑,并且输出并不总是 5 47。47 可以是任何东西。它可能是 5 7、5 23 等。这是因为 fscanf 没有读取第二个数字,因此没有为 test 分配任何值。因此,测试保持在程序启动时该内存中的值。

要解决此问题,请将 %d 替换为 %c 并将 blah 和 test 的类型更改为 int。另外,正如 WhozCraig 所说,检查 fscanf 的返回值以检查是否已找到两个值是一种很好的做法。这样,您就可以确定已找到您要查找的所有内容。

关于c - 关于C中的文件输入和输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25858699/

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