C使用./a.out读取文件

时间:2014-10-30 23:21:44

标签: file

在我今天的班级中,我们被分配了一个项目,该项目涉及使用./a.out"<" filename命令读取文件。该文件的内容如下所示

16915  46.25  32  32
10492  34.05  56  52
10027  98.53  94  44
13926  32.94  19  65
15736  87.67  5  1
16429  31.00  58  25
15123  49.93  65  38
19802  37.89  10  20
-1 

但更大

我的问题是之后使用的任何scanf都被完全忽略,只是在打印时扫描看起来像垃圾,而不是接受用户输入。在我的实际程序中,这导致了需要输入的菜单问题。

如何让程序停止读取./a.out"<"filename命令提供的文件? 我也停止搜索-1而不是EOF,因为没有额外的一组以-1开头的数组数据 前

-1 0 0 0

在我的真实程序中,班级大小是一个可调整的常量,用于计算班级平均值,而不是没有一组0来扭曲这些数据。

#include <stdio.h>

int main(void)
{
        int i = 0,j = 1,d,euid[200],num;
        int tester = 0;
        float hw[200],ex1[200],ex2[200];
        while(j)
        {
                scanf("%d",&tester);
                if( tester == -1)
                {
                        j = 0;
                }
                else
                {
                        euid[i] = tester;
                }
                scanf("%f",hw+i);
                scanf("%f",ex1+i);
                scanf("%f",ex2+i);
                i++;
        }
        for(d = 0;d < 50;d++) /*50 because the actual file size contains much more than example*/
        {
                printf("euid = %d\n",euid[d]);
                printf("hw = %f\n",hw[d]);
                printf("ex1 = %f\n",ex1[d]);
                printf("ex2 = %f\n",ex2[d]);
        }
        printf("input something user\n");
        scanf("%d",&num);
        printf("This is what is being printed out -> %d\n",num);
return 0;
}

2 个答案:

答案 0 :(得分:0)

我有完全相同的问题。尝试了我能找到的每个方法来吃缓冲区中的剩余输入,但它永远不会结束。

使用fopen和fscanf工作,但教授。他说他更喜欢使用a.out&lt;文件名

答案 1 :(得分:0)

事实证明这实际上是不可能的。