gpt4 book ai didi

c - 从文本文件 c 解析 int 时出错

转载 作者:行者123 更新时间:2023-11-30 16:56:58 25 4
gpt4 key购买 nike

到目前为止,这是我的代码,基本上我正在读取文本文件,并尝试将每一行输入保存到字符数组中。文本文件被正确读取并保存到字符数组中,然后我遍历该数组,并尝试将数字保存到 int 中。

*这不是完整的代码片段,因为它是我正在处理的一项作业。当前提供的代码仅用于调试目的。

//takes input of file, saves it to array
char word[20];
scanf("%s", word);

//File to open
char line[10];
char number[10];

FILE *file;
file = fopen(word, "r");

if (file) {
while (fgets(line, sizeof(line), file)) {
printf("%s", line);
int i,j=0;
int parsedInt;

for(i=2; i<sizeof(line) && !isspace(line[i]); i++)
{
number[j] = line[i];
j++;
}
sscanf(number, "%d", &parsedInt);
printf("PARSED INT %d \n\n", parsedInt);
parsedInt = 0;

这是一个示例输入文件,我已经处理了 id,效果很好。

i   10
i 12
d 10
i 3

这是包含这些数字的示例输出

i   10
PARSED INT 10

i 12
PARSED INT 12

d 10
PARSED INT 10

i 3
PARSED INT 32

有人可以解释为什么最后一个输入给出的是 32 而不是 3,而其他输入都正确完成?

最佳答案

由于我们没有看到所有内容,因此我将做出有根据的猜测,即您在输入值之前没有清除数字数组,因此 scanf() 会超出您的实际输入。在 for 循环后面放置一个 '\0' 或使用 memset() 或类似方法在使用前清除数组。就像这样:

memset(number, 0, sizeof(number));
for(i=2; i<sizeof(line) && !isspace(line[i]); i++) {
number[j] = line[i];
j++;
}

这假设 '\0' == 0(这是一个该死的安全假设 IME)。

关于c - 从文本文件 c 解析 int 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39714088/

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