c - 为什么我的 fscanf 不断跳过随机数?

标签 c file-io scanf

基本上我需要扫描这个文件中的所有值...它几乎做到了,但它似乎跳过了随机值,所以它最终没有正确排列。 (这只是我需要为作业做的一部分,所以你不会“放弃答案”,我仍然想自己弄清楚,只需要一点帮助来弄清楚这个,因为我相当卡住)

https://www.dropbox.com/sh/wterbuyxm76wwrz/AADEtolX68OFrKELI_lxT8_Ra/assignments%20and%20labs/labs/lab5_inputFile.txt?dl=0

代码如下:

int main()
{
    FILE *fp;
    char x[15];
    float ID [1000];
    int i=0, j=0;
    float homework [1000];
    float lab [1000];
    float midterm [1000];
    float Final [1000];
    int count=0;
    char headers[35];
    char y;

    fp= fopen("lab5_inputFile.txt", "r");

    while (fscanf(fp, "%s", x)!=EOF){
        if (count > 728){
            fscanf(fp, "%f", &ID[i]);
            printf("ID : %.1f\n", ID[i]);
            fscanf(fp, "%f", &homework[i]);
            printf("Homework: %.1f\n", homework[i]);
            fscanf(fp, "%f", &lab[i]);
            printf("lab: %.1f\n", lab[i]);
            fscanf(fp, "%f", &midterm[i]);
            printf("Midterm: %.1f\n", midterm[i]);
            fscanf(fp, "%f", &Final[i]);
            printf("Final: %.1f\n", Final[i]);

            i++;
        }
            count ++;

    }
    printf("count = %d\n", count);
    fclose(fp);

我只扫描了最后几个值以使其更易于阅读/调试,在实际代码中我只会跳过标题,在提交之前我还计划更改很多其他内容,比如我可能会使用指针类型和 malloc 而不是数组和其他一些东西,但我的主要问题是如何解决我在从文件读取到数组时遇到的问题。

提前致谢!

最佳答案

你每次都跳过第一行x。您应该将其重写为:

char x[100];
/* while (fscanf(fp, "%s", x)!=EOF){ */
fgets(x, 100, fp);  /* Skip first line */
for(; /* ever */; ) {
    if(5 == fscanf(fp, "%f%f%f%f%f", &ID[i], &homework[i], &lab[i], &midterm[i], &Final[i])) {
       printf("ID : %.1f\n", ID[i]);
       printf("Homework: %.1f\n", homework[i]);
       printf("lab: %.1f\n", lab[i]);
       printf("Midterm: %.1f\n", midterm[i]);
       printf("Final: %.1f\n", Final[i]);
       i++;
    } else break;
}

Live example here

关于c - 为什么我的 fscanf 不断跳过随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27008915/

相关文章:

file-io - 使用jmeter将提取的数据写入文件

c++ - 将 cv::Mat 写入二进制文件?

c - 程序的不同行为

c - 在 C while 循环中,是否可以比较两个变量 while (a < b)?

c - 如何在C中的printf中打印系统("date")?

通过gtk_menu_popup显示的gtk菜单可以释放焦点吗?

c - fread() 将奇怪的东西放入 char 数组

c++ - Eclipse C/C++ (CDT) 切换工作空间(共享)

c - 二维数组地址簿存在 fgets 问题

c - 在 while 循环和重新分配期间将带有 scanf 的整数放入内存分配中