Форум программистов, компьютерный форум CyberForum.ru

Проверка содержимого текстового файла - C++

Восстановить пароль Регистрация
 
luxlite_oleg
0 / 0 / 0
Регистрация: 04.12.2013
Сообщений: 14
13.02.2014, 19:30     Проверка содержимого текстового файла #1
Помоги проверить содержимое файла на числа
!Сделал вот как я думаю
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
bool lch(string FN)
{
 ifstream F1(FN, ios::in);
char ch;
 while (F1 >> ch)
 {
 
  if (((ch <= 9) && (ch >= 0)) || (ch == '-') || (ch == ' ') || (ch == '\n') )
   return true;
  else
   return false;
 }
}
Но даже если в файле нет ничего постороннего, все равно программа видит что есть посторонние символы.

Добавлено через 21 час 31 минуту
Весь код программы
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include "stdafx.h"
#include <iostream> 
#include <conio.h>  
#include<iomanip>
#include <time.h>   
#include<fstream>
#include<string>
using namespace std;
bool lch(string FN)
{
 ifstream F1(FN, ios::in);
char ch;
 while (F1 >> ch)
 {
 
  if (((ch <= 9) && (ch >= 0)) || (ch == '-') || (ch == ' ') || (ch == '\n') )
   return true;
  else
   return false;
 }
}
 
int func_kol(string FN)
{
ifstream F1(FN, ios::in);
int c,i=0;
while (!F1.eof())
 {
  F1 >> c;
  i++;
 }
 return i;
}
 
int main()
{ setlocale(LC_ALL, "rus");
string FNAME;
bool h = false;
do
{
cout<<"Введите имя файла:";
    cin>>FNAME;
    ifstream F1(FNAME, ios::in);
 if (!F1) 
  {
cout<<"Файл не открыт"<<endl;
  }
 
    
else
   {
    if (lch(FNAME) == false) cout << "В строке есть неккоректные данные!" << endl;
    else
    {
      int n;
bool p = false;
int i,sa,s=0;
      n = func_kol(FNAME);
 int  *a=new int[n];
      h= true;
      a=(int*)malloc(n*sizeof(int)); //выделение динам.памяти
 
if(!a)                              //проверка факта выделения памяти
 
{cout<<"\nНедостаточно памяти";}
 cout<<setw(18)<<"Номера элементов:";
for (i=1; i<(n+1); i++) 
cout<<setw(3)<<i;
cout<<endl;
cout<<setw(18)<<"Элементы:";
for (i=0; i<n; i++) 
   {
        F1>>a[i];
        cout<<setw(3)<<a[i];
        {s+=a[i];}
   }
for ( i = 0; i <10; i++)
{
    if(a[i]<0)p=true;
 }
sa=s/n;
if (p == true)
{
  for (i = (n - 5); i < n; i++)
  {
   a[i] = sa;
  }
  cout<<endl;
 cout<<setw(18)<<"Конечный массив:";
    for ( i = 0; i < n; i++)
    cout<<setw(3)<<a[i];
    
} 
else
{ 
    cout<<endl;
    cout<<setw(18)<<"В первой 10ке нет отрицательных элементов";
}
 delete []a;
  free(a);
 F1.close();
    }}
 
}while(h==false);
 
_getch();
 return 0;
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.02.2014, 19:59     Проверка содержимого текстового файла #2
Если это проверка на цифры, то:
C++
1
if (((ch <= '9') && (ch >= '0'))
luxlite_oleg
0 / 0 / 0
Регистрация: 04.12.2013
Сообщений: 14
13.02.2014, 20:54  [ТС]     Проверка содержимого текстового файла #3
alsav22, На цифры, пробелы, конец строки. Просто в моём условии, когда файл забит правильно, то все равно мне выдается как будто там некоректные символы, хотя там только цифры
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.02.2014, 21:08     Проверка содержимого текстового файла #4
Цитата Сообщение от luxlite_oleg Посмотреть сообщение
alsav22, На цифры, пробелы, конец строки.
И? На цифры так проверяете?
Цитата Сообщение от luxlite_oleg Посмотреть сообщение
if (((ch <= 9) && (ch >= 0))
luxlite_oleg
0 / 0 / 0
Регистрация: 04.12.2013
Сообщений: 14
13.02.2014, 21:22  [ТС]     Проверка содержимого текстового файла #5
alsav22, if (((ch <= 9) && (ch >= 0)) || (ch == '-') || (ch == ' ') || (ch == '\n') )
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.02.2014, 21:25     Проверка содержимого текстового файла #6
Цитата Сообщение от luxlite_oleg Посмотреть сообщение
alsav22, if (((ch <= 9) && (ch >= 0)) || (ch == '-') || (ch == ' ') || (ch == '\n') )
Между этим:
C++
1
 if (((ch <= 9) && (ch >= 0))
и этим:
C++
1
if (((ch <= '9') && (ch >= '0'))
разницу видите?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2014, 21:28     Проверка содержимого текстового файла
Еще ссылки по теме:

Проверка содержимого массива C++
C++ Проверка текстового файла
Некорректная проверка на существование текстового файла C++

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

Или воспользуйтесь поиском по форуму:
luxlite_oleg
0 / 0 / 0
Регистрация: 04.12.2013
Сообщений: 14
13.02.2014, 21:28  [ТС]     Проверка содержимого текстового файла #7
alsav22, Ой, блин, не заметил, всё, сейчас исправил, работает.

Добавлено через 19 секунд
alsav22, Спасибо!
Yandex
Объявления
13.02.2014, 21:28     Проверка содержимого текстового файла
Ответ Создать тему
Опции темы

Текущее время: 09:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru