繁体   English   中英

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

[英]errors parsing int from text file c

到目前为止,这是我的代码,基本上,我正在阅读一个文本文件,并尝试将输入的每一行保存到字符数组。 正确读取了文本文件,并将其保存到一个字符数组,然后我遍历该字符数组,并尝试将数字保存到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)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM