2016-09-26 33 views
0

继承人到目前为止我的代码,基本上我阅读的文本文件,并试图通过线路输入的每一行保存到一个字符数组。文本文件被正确读取并保存到一个字符数组,然后我遍历并尝试将数字保存到int错误分析从文本文件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中,而另一些得当?

+0

'for(i = 2; i

+0

'number'需要空值终止 – BLUEPIXY

+0

如果您解析只有一个字符线什么'I = * 2 *;?I <的sizeof(线)&& isspace为(行* [I] *);!?'你会读到。坏数据 – LoztInSpace

回答

0

因为我们没有看到的一切,我会采取一种猜测,你没有投入值之前清除数值列,所以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(这是一个该死的安全假设输入法)。

+0

感谢这为我工作。 – yugantjoshi