从文本文件中解析int的错误c

时间:2016-09-26 23:56:37

标签: c

到目前为止,我的代码是Heres,基本上我正在读取文本文件,并尝试将每行逐行输入保存到字符数组中。正确读取文本文件并保存到我随后遍历的字符数组中,并尝试将数字保存到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

和heres示例输出这些数字

i   10
PARSED INT 10 

i   12
PARSED INT 12 

d   10
PARSED INT 10 

i   3
PARSED INT 32 

有人可以解释为什么最后一个输入会给出32而不是3而其他输入正确吗?

1 个答案:

答案 0 :(得分:0)

由于我们没有看到所有内容,我会采取有根据的猜测,在放入值之前你没有清除数字数组,所以scanf()超过了你的实际输入。要么放一个&#39; \ 0&#39;在你的for循环之后或使用memset()或类似的方法在使用之前清除数组。所以喜欢:

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

这假定&#39; \ 0&#39; == 0(这是一个该死的安全假设IME)。