簡體   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