Отладочное утверждение не удалось. при использовании fscanf - PullRequest
2 голосов
/ 03 января 2012

Эй, я пробовал много программ в 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 ]

3 голосов
/ 03 января 2012

Звучит так, будто fp НЕДЕЙСТВИТЕЛЕН.Наиболее вероятная причина в том, что один из файлов (или оба) не существует или не может быть открыт (например, потому что его использует какой-то другой процесс).

Я бы начал с добавления некоторой ошибкипроверка после двух вызовов fopen(): сравните результат с NULL и, если он равен NULL, проверьте errno.

0 голосов
/ 03 января 2012

Ваши счетчики цикла начинаются с 1 вместо 0, что странно для программирования на Си.Вероятно, что вы не выделяете достаточно места в массиве, то есть у вас есть

double a[5][5];

, когда вам нужно

double a[6][6];

, поэтому вы наступаете на что-то после концамассив.Лучше, чтобы ваш цикл был

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

, чтобы не тратить 0 слотов в массиве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...