gpt4 book ai didi

c - 为什么 fscanf 读取垃圾值

转载 作者:太空宇宙 更新时间:2023-11-04 08:19:41 26 4
gpt4 key购买 nike

我有一个简单的文件如下:

1
3
a 7

当我运行下面的代码时,我得到了一些意想不到的结果。我最初尝试读取前两个整数,然后读取字符 a 和数字 7。数字 13 后没有空格。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


main(int argc, char **argv)
{
FILE *f;
f = fopen(argv[1],"r");
int num1, num2, num3;
char t;

fscanf(f, "%d",&num1);
fscanf(f, "%d",&num2);


fscanf(f, "%c %d", &t, &num3);
printf("%c %d\n", t, num3);
}

编辑:

输入是包含内容的文件:

    1
3
a 7

输出是一个新行和一些垃圾。预期输出应为 a 7

编辑 2:它正确读取 1 和 3。如果失败则尝试读取单个字符 a

最佳答案

看看当你运行这个时会发生什么:

fscanf(f, "%d",&num1);

跳过空格(其中没有空格),然后读取一个整数 (1)

fscanf(f, "%d",&num2);

跳过空格(第一行末尾的换行符)然后读取一个整数(3)

fscanf(f, "%c %d", &t, &num3);

从输入中读取下一个字符(一个换行符),然后跳过空格(无)并尝试读取一个整数。下一个输入字符是“a”,因此失败,fscanf 调用返回 1 而没有向 num3 写入任何内容。

所以你遇到的问题是,由于 %c 确实 NOT 跳过空格,你正在读取空格(换行符)而不是字符预计。最明显的解决方案是在格式中添加一个空格 () 以跳过空格:

fscanf(f, " %c%d", &t, &num3);

请注意,我还删除了 %d 之前的空格,因为它是多余的(%d 总是跳过空格)。

此外,检查 fscanf 的返回值以确保它正在读取您期望的输入项数始终是一个好主意。

关于c - 为什么 fscanf 读取垃圾值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33964171/

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