2012-12-08 29 views
1

我想寫一個程序,從文本文件中讀取一行,並將語言方程打印到數學文件中,但由於某些原因,它僅讀取第二行和最後一行TXT文件。不讀每行文本文件

文本示例

subtraction,3,57 
multiplication,90,46 
division,26,7 
division,26,0 

代碼

int main() 
{ 
    char name[21], namecopy[21]; 
    char *nc, com = 100; 
    int num1, num2, p, i; 
    FILE *file; 

    file = fopen("C:\\hw10.txt", "r"); 
    strcpy(namecopy, name); 

    while (fgets (namecopy,21,file)!=NULL) 
    { 
    fscanf(file, "%[^,]%*c %i%*c %i%*c", &name, &num1, &num2); 
    printf("%s %i %i\n", name, num1, num2);  

    if(strcmp(name, "subtraction") == 0) 
    { 
     p = num1-num2; 
     printf("%d - %d = %i \n", num1, num2, p); 
    } 

    if(strcmp(name, "addition") == 0) 
    { 
     p = num1+num2; 
     printf("%d + %d = %i \n", num1, num2, p); 
    } 

    if(strcmp(name, "multiplication") == 0) 
    { 
     p = num1*num2; 
     printf("%d x %d = %i \n", num1, num2, p); 
    } 

    if(strcmp(name, "division") == 0) 
    { 
     if(num2==0) 
     printf("undefiend\n"); 
     else 
     { 
     p = num1/num2; 
     printf("%d/%d = %i \n", num1, num2, p); 
     } 
    } 
    } 
    char ch=getchar(); 
    return 0; 
} 
+1

在取而代之的是調用fgets,接着是fscanf,你不應該單獨調用fscanf,還是fgets跟在字符串fgets上的sscanf讀取? – goji

+0

fgets(namecopy,21,file)!= NULL; ----- 你用namecopy字段中的值讀取的內容是什麼? –

+2

strcpy(namecopy,name);這條線似乎也毫無意義,您將未初始化的名稱複製到namecopy中,然後用fgets覆蓋它。 – goji

回答

1

這條線:

fscanf(file, "%[^,]%*c %i%*c %i%*c", &name, &num1, &num2); 

應該是

sscanf(namecopy, "%[^,]%*c %i%*c %i%*c", &name, &num1, &num2); 
+0

謝謝!你能告訴我爲什麼嗎?所以我可以理解它的機制? –

+0

fgets從文件讀取一行。 fscanf立即讀取另一行,而不讓程序格式化來自行1的輸入。另一個問題是混合fscanf和fgets來讀取同一文件會導致文件指針不在您想要的位置。現在堅持fgets。 –