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

Проверка при чтении из файла - C++

Восстановить пароль Регистрация
 
Genson
0 / 0 / 0
Регистрация: 09.03.2011
Сообщений: 6
09.03.2011, 22:06     Проверка при чтении из файла #1
Добрый вечер!
В своей программе на одном из этапов я построчно считываю целые числа из файла *.txt.
Мне нужно чтобы в файле были только целые числа, а в случае "крякозабр" (типа "-1-1", "gdh" , "234Dcm23" и т.д.) и переполнения int, программа выдавала соответствующее сообщение.

Листинг:
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
#include <iostream> 
#include <tchar.h>
#include <stdio.h>
#include <io.h>
#include <stdlib.h>
#include <fstream>
#include <string>
#include <cctype> 
#include <conio.h>
using namespace std;
 
#define SIZE 50
 
int binsearch(int x, int a[], int a2[],int n)
{
    int first = 0; // Первый элемент в массиве
    int last = n; // Последний элемент в массиве
    int mid;
 
    while ( first < last ) {
        mid = ( first + last ) / 2;
        if ( x <= a[mid] ) {
            last = mid;
        } else {
            first = mid + 1;
        }
    }
 
    if ( a[last] == x ) {
        for (int t=0; t<n;t++)
        {
            if (a[last] == a2[t]) printf("\nThe number %d is located in an array in number position: %d \n", x,t+1);
        }
        
    } else {
        printf("\nThe number %d is not located in an array\n", x);
    }
 
    return 0;
}
 
 
int main(){
    
    //const int LEN=80;
    char BUF[50];
    int mass[SIZE], mass2[SIZE], k=0, key;
    
    ifstream in_file ("e:\\test.txt", ios::in);
 
    //проверка связанная с открытием файла
    if (! in_file){ 
        cerr<<"Error input file"<<endl;
        exit(1);
    }
    
    // Считываем данные из файла в массив
    while (in_file)
    { in_file.getline(BUF,sizeof(BUF));
        
        mass2[k]= atoi( BUF); // нужен для того чтобы выдавать позицию в файле
        mass[k]= atoi( BUF);
 
        k++;
    }
    ////////////////////////////////////////////////////////////
    
    cout << "Please enter key for seach: "<< endl;
    cin >> key; // считываем со строки в int
    char key_char = (char)cin.get(); // считываем со строки в char
    
    // преобразование инт в чар*, потом в стринг и нахождение колличества элементов в строке для переполнения
    char * szString = new char[17];
    itoa(key,szString,10); // int -> char
    string str = (string)szString;
    if ((int)key_char != 10){cout << "a is not number! Again!" << endl; cout << "Press ENTER to finish work" << endl; getch(); return 0;}// если аски последний равен 10(аски перехода на новыю строку), то все круто
    if (str.length() ==45) {cout<< "Program uses only unsigned int" <<endl; cout << "Press ENTER to finish work" << endl; getch(); return 0;}
    if (str.length() >=10) {cout<< "Overflowing" <<endl; cout << "Press ENTER to finish work" << endl; getch(); return 0;}
   
 //пузырьковая сортировка по возрастанию
    for (int i = 1; i<k-1; i++){
        int tmp = 0;
        for (int j=0; j<k-2; j++)
            if (mass[j]>mass[j+1]) {
                tmp = mass[j];
                mass[j] = mass[j+1];
                mass[j+1] = tmp;        
                }
    }
 
    // бинарынй поиск ключа 'key' в массиве mass[] 
    binsearch(key,mass,mass2,k-1);
    getch();
 
    return 0;
}
Сам файл примерно следующего содержания:
4h46
5
45
16
90
1
65
-19
3
1
85
888
34
56
32
1
3
90
574
5555

P.S. Это моя первая программа на С++.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2011, 22:06     Проверка при чтении из файла
Посмотрите здесь:

Иероглифы при чтении из файла C++
Ошибка при чтении файла C++
Ошибка при чтении из файла C++
C++ bool при чтении из файла
фейл при чтении из файла C++
Ошибка при вызове метода класса, при чтении из файла C++
Зацикливание при чтении из файла C++
Абракадабра при чтении из файла C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
09.03.2011, 22:18     Проверка при чтении из файла #2
как вариант:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
/*...*/
FILE * f;
char buf[32], * tail;
long val;
/* открыть файл, проверить, что открылся */
while ( fscanf(f, "%s", buf) == 1 ){
  errno = 0;
  val = strtol(buf, &tail, 10);
  if ( errno || *tail )
    /* ошибка */
  /* val содержит прочитанное число */
}
/*...*/
Genson
0 / 0 / 0
Регистрация: 09.03.2011
Сообщений: 6
09.03.2011, 22:43  [ТС]     Проверка при чтении из файла #3
Большое спасибо, всё работает!
Yandex
Объявления
09.03.2011, 22:43     Проверка при чтении из файла
Ответ Создать тему
Опции темы

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