2

嘿,我在 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);

这是代码位。

4

2 回答 2

3

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

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

于 2012-01-03T18:51:31.983 回答
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 个插槽。

于 2012-01-03T18:55:29.970 回答