Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
a.n.o.n.i.m
137 / 137 / 39
Регистрация: 26.02.2011
Сообщений: 536
1

Как проверять текстовый файл на корректные данные?

24.03.2012, 14:37. Просмотров 747. Ответов 6
Метки нет (Все метки)

Размерность вводится до открытия файла.Язык СИ

В книгах да и в интерене попадается одна проверка на существование файла

Код
f1=fopen(nameIn,"r")) == 0
Как проверить файл на корректность данных?вот в файле матрица

Код
1 2 3
4 5 6
7 8 9
А если скажем будет буква,как это проверить?

Код
1 2 3
4 d 6
7 8 9
Ниже код работы с файлом


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{
       int *masiv = (int*)malloc(sizeof(int) * (n*n));
           printf("\n");
           printf("Vvedite  imy faila: ");
           scanf("%s",nameIn);
           while( (f1=fopen(nameIn,"r")) == 0 )
           {
                 printf("\nError.Fail ne naiden\n");
                 printf("\nVvedite  imy faila: ");
                 scanf("%s",nameIn);
 
           }
      i=0;
      while(fscanf(f1,"%i",&masiv[i])!=EOF)//пока не дошли до конца,увеличиваем счетчик
      {
                 i++;
      }
      if( i < (n*n) || i > (n*n) )            //"странноватая проверка"====================
                     {
                       printf("Error.Dannye nekorektny");
                       getch();
                       return 0;
                     }      
      p=0;
      for(i=0;i<n;i++)
      {
          for(j=0;j<n;j++)
          {
                A[i][j]=masiv[p];
                p++;
          }
      }
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2012, 14:37
Ответы с готовыми решениями:

Функция, что записывает в текстовый файл данные структуры, введенные с клавиатуры
Помогите сделать программу. Написать функцию, что записывает в текстовый файл...

Исходный текстовый файл скопировать в результирующий текстовый файл, удалив слова менее N1 символов
Не так давно я просил помощь в написании программы на си: Исходный текстовый...

Создать текстовый файл из 5 строк, прочитать созданный файл и получить новый файл
Создать текстовый файл из 5 строк, прочитать созданный файл и получить новый...

Как на чистом си отправить текстовый файл в сом порт?
вот нашел одну тему на форуме подобную...

Как используя класс FILE записать в текстовый файл в кодировке MS-DOS?
Как используя класс FILE записать в текстовый файл в кодировке MS-DOS?

6
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
24.03.2012, 14:47 2
C
1
2
if ( fscanf(infile, "%d", &val) != 1 ) 
   printf("Error\n");
Добавлено через 4 минуты
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
while(fscanf(f1,"%i",&masiv[i])!=EOF)//пока не дошли до конца,увеличиваем счетчик
Так нельзя. Нужно проверять ferror, иначе в случае ошибки зациклиться. Необходимо сравнивать в вашем случае с единицей.
1
a.n.o.n.i.m
137 / 137 / 39
Регистрация: 26.02.2011
Сообщений: 536
24.03.2012, 14:54  [ТС] 3
Запутался,можете часть кода подкорректировать мою?
0
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
24.03.2012, 15:07 4
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
Как проверить файл на корректность данных?вот в файле матрица
Попробуйте так.
C
1
2
3
while ( (ret = fscanf(infile, "%d", &val)) == 1 ) ;
if ( ret == 0 && !ferror(infile) ) 
   printf("Error\n");
0
a.n.o.n.i.m
137 / 137 / 39
Регистрация: 26.02.2011
Сообщений: 536
24.03.2012, 15:25  [ТС] 5
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
     {
           int *masiv = (int*)malloc(sizeof(int) * (n*n));
           printf("\n");
           printf("Vvedite  imy faila: ");
           scanf("%s",nameIn);
           while( (f1=fopen(nameIn,"r")) == 0 )
           {
                 printf("\nError.Fail ne naiden\n");
                 printf("\nVvedite  imy faila: ");
                 scanf("%s",nameIn);
 
           }
      i=0;
      while(fscanf(f1,"%i",&masiv[i])!=EOF)//ïîêГ* Г*ГҐ äîøëè äî ГЄГ®Г*Г¶Г*,óâåëè÷èâГ*ГҐГ¬ Г±Г·ГҐГІГ·ГЁГЄ
      {
                 i++;
      }
      if( i < (n*n) || i > (n*n) )            //"Г±ГІГ°Г*Г*Г*îâГ*ГІГ*Гї ïðîâåðêГ*"====================
                     {
                       printf("Error.Dannye nekorektny");
                       getch();
                       return 0;
                     }      
      p=0;
      for(i=0;i<n;i++)
      {
          for(j=0;j<n;j++)
          {
                A[i][j]=masiv[p];
                if ( fscanf(f1, "%i", &A[i][j]) != 1 ) 
                     {
                       printf("Errorka");
                       getch();
                       return 0;
                     }
                p++;
          }
      }
      }
Вот попробовал но постоянно выкидывает что ошибка дажеесли все верно задано
0
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
24.03.2012, 15:27 6
a.n.o.n.i.m, вы мой фрагмент кода видели? С Вас только написать открытие файла и сказать мне результат. Справитесь?
0
a.n.o.n.i.m
137 / 137 / 39
Регистрация: 26.02.2011
Сообщений: 536
24.03.2012, 18:21  [ТС] 7
Видел я ваш фрагмент,я в свой хочу его вставить

Добавлено через 2 часа 47 минут
Сделал так,но как по другому сделать?с помощью функций стандартных каких нибудь.
я просто константы подставил от 1000 до - 1000 можно получается заполнить так как если буква или размерность больше чем была указана ранее вылазило многозначное число 5498463216584 и таком духе

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
           printf("\n");
           printf("Vvedite  imy faila: ");
           scanf("%s",nameIn);
           while( (f1=fopen(nameIn,"r")) == 0 )
           {
                 printf("\nError.Fail ne naiden\n");
                 printf("\nVvedite  imy faila: ");
                 scanf("%s",nameIn);
           }
           for (i=0;i<n;i++)
                {
                 for (j=0;j<n;j++)
                      {
                       fscanf (f1,"%i",&A[i][j]);
                       if( A[i][j] > 1000 || A[i][j] < -1000 )
                       {
                                printf("Errorka.");
                                getch();
                                return 0;
                       }
                      }
                }
      }
0
24.03.2012, 18:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2012, 18:21

Не корректные координаты мыши
Здравствуйте! Помогите, пожалуйста, разобраться. Написал программу, одна...

Дан текстовый файл. Вывести в другой файл самые длинные слова текста
Дан текстовый файл. Вывести в другой файл самые длинные слова текста (с учетом...

Дан текстовый файл. Переписать в новый файл все его строки четной длины
помогите написать программу заранее спасибо Дан текстовый файл. Переписать в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru