2012-02-07 69 views
0

当我尝试从文件中读取整数时,代码最终读取的数字比预期的要多。为什么应用程序从文件中读取不正确的整数?

数据文件包含以下号码:

1111 111 222 333 444 555 666 777 888 -1 

当我看到文件,它返回以下数字:

825307441 825307424 842150432 858993440 875836448 
892679456 909522464 926365472 943208480 170994976 

这究竟是为什么?

相关代码:

/* A file named data contains some integer numbers.write a program to 
    read these numbers and store the odd numbers in one file and store 
    the even numbers in file.*/ 

    int main() 
    { 
    FILE *fp1,*fp2,*fp3; 
    int number; 

    fp1=fopen("DATA","r"); 
    fp2=fopen("even","w"); 
    fp3=fopen("odd","w"); 

    printf("numbers in file are\n"); 
    while((number=getw(fp1))!=EOF) 
    { 
     printf("%d\t",number); 
    } 
    fclose(fp1); 
    fp1=fopen("DATA","r"); 


    while((number=getw(fp1))!=EOF) 
    { 
     if((number%2)==0) 
     { 
     putw(number,fp2); 
     } 
     else 
     { 
     putw(number,fp3); 
     } 
    } 
    fclose(fp1); 
    fclose(fp2); 
    fclose(fp3); 

    fp2=fopen("even","r"); 
    fp3=fopen("odd","r"); 

    printf("\nnumbers in even file are\n"); 
    while((number=getw(fp2))!=EOF) 
    { 
     printf("%d\t",number); 
    } 

    printf("\nnumbers in odd file are\n"); 
    while((number=getw(fp3))!=EOF) 
    { 
     printf("%d\t",number); 
    } 
    fclose(fp2); 
    fclose(fp3); 
    return 0; 

    } 
+0

这是不是相当于[你自己的问题3小时前](http://stackoverflow.com/q/9176555/1151654)? 如果您在问题上取得进展但仍有问题,请编辑您的问题而不是创建新问题。更多的是:你没有接受任何关于上一个链接问题的答案。 – Eregrith 2012-02-07 16:20:45

+1

@Eregrith,这似乎是一个不同的问题,所以可以问新的问题,但OP应该接受以前的问题的答案。 – Nim 2012-02-07 16:23:07

回答

6

您正在阅读纯文本格式表示的数字。

getw读取一个机器字(例如我的64位盒上的8个字节),当你写出它时,它会写出来。这不是你想要的。

使用fscanf而不是getw来读取格式化值。

相关问题