调试断言失败。而使用fscanf

时间:2012-01-03 07:52:02

标签: c debugging scanf assertion

嘿我在Visual Studio中尝试了很多程序,当我尝试从流中获取输入时(大多数情况下使用fscanf),它总是抛出一个debug assertion failed error ..

继续说:

stream != NULL。因为我多次得到这个错误..我假设我使用fscanf的方式存在缺陷。如果有人可以告诉我使用情况,或者给我一个示例代码,说明简单的用法,我将不胜感激..!

我试着查找错误..在大多数地方它说我没有关闭文件..但我有,我有点困惑..我感谢任何帮助..非常感谢:)

    printf("Enter No of states\n");
     Q=5;
  //  scanf("%d",&Q);

   // READING ZERO MATRIX
  // reading the matrix from f0.sta
 {
  FILE *fp;
   fp = fopen("c:\\tc\\fuzzy\\f0.sta","r");
   for(i=1;i<=Q;i++)
    for(j=1;j<=Q;j++)
     fscanf(fp,"%f",&a0[i][j]);

    fclose(fp);
 }
 // READING ONE MATRIX
 // reading the matrix from f0.sta
   FILE *fp;
    fp = fopen("c:\\tc\\fuzzy\\f1.sta","r");
     for(i=1;i<=Q;i++)
      for(j=1;j<=Q;j++)
        fscanf(fp,"%f",&a1[i][j]);

    fclose(fp);

这是代码位。

2 个答案:

答案 0 :(得分:3)

听起来fp为NULL。最可能的原因是其中一个(或两个)文件不存在或无法打开(例如,因为某些其他进程正在使用它)。

我首先在两次fopen()调用后添加一些错误检查:将结果与NULL进行比较,如果是NULL,请检查errno

答案 1 :(得分:0)

你的循环计数器从1开始而不是0,这对C编程来说很奇怪。可能发生的是你没有在阵列中分配足够的空间,即你有

double a[5][5];

何时需要

double a[6][6];

所以你要踩到数组末尾的东西。最好让你的循环

for(i=0;i<Q;i++)
  for(j=0;j<Q;j++)

所以你不要浪费数组中的0个插槽。