繁体   English   中英

为什么在while循环后printf不打印任何内容

[英]Why does printf not print anything after my while loop

这是我的代码

#include <stdio.h>
#include <stdlib.h>
int main ()
{
    int x = 0;
    int y = 0;
    float a[5][2];      //array
    float b[3][2];      //array
    float c[2][2];      //array
    FILE *fr;
    //int c;
    float power;
    char unit[5];
    //int N;        //Number of sensors
    float TI;       //Time interval
    //char M;       //Midpoint
    //char T;       //Trapezoid
    //int SR;       //Sample Rate
    fr = fopen("sensor_0.txt","r");
    /*fr = fopen("sensor_1.txt","r");
    fr = fopen("sensor_2.txt","r");
*/
//----------------------------------------------------------------------------------------------------------------------------
 printf("The contents of %s file are :\n", "sensor_0.txt");
 while ( !feof( fr ) )
 {


fscanf(fr, "%f %f %s",&TI, &power, unit);

//printf("%f, %f \n", TI,power);        //print
a[x][y] = TI;
a[x][++y]= power;
x++;
y = 0;

 }
  fclose(fr);
//----------------------------------------------------------------------------------------------------------------------------

  printf("%s", "hello");

    return 0;
}

为什么while循环后我的字符串不打印任何内容? 如果我取消了while循环中同一行的注释,它将正确打印。 我也尝试过只添加简单的printf("hello") ,而while循环后似乎什么也没用。

编辑-次要格式。

output should just be
700 25.18752608 mW
710 26.83002734 mW
720 26.85955414 mW
730 23.63045233 mW

我怀疑文件有5行,而不是4行。

您对!feof()测试失败,因为您在尝试读取第6行时尚未到达文件末尾。 fscanf失败,但是您不测试返回值。 因此,您可以在2D阵列的末尾存储TIpower ,从而调用未定义的行为。

通过这种方式更改加载代码应该可以解决此问题:

while (x < 5 && fscanf(fr, "%f %f %4s", &TI, &power, unit) == 3) {
    a[x][0] = TI;
    a[x][1] = power;
    x++;
}
if (x != 5) {
    printf("incomplete input\n");
}

按照chqrlie的建议进行工作。
“而不是使用不正确的while(!feof(fr)),而应使用while(fscanf(fr,“%f%f%4s”,&TI,&power,unit)== 3)”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM