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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.61
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
#1

Как считать информацию из файла, если в конце стоит пробел? - C++

03.12.2008, 01:28. Просмотров 2229. Ответов 6
Метки нет (Все метки)

У меня при считывании из файла в массив, если в конце файла стоит пробел, то копируется ещё один символ (-842…..). Как определить, что в конце стоит пробел и дальше ничего не считывать?

for (i = 0;!feof (fin); i++)
{
fscanf (fin, "%d", &mas[i]);
n++;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2008, 01:28     Как считать информацию из файла, если в конце стоит пробел?
Посмотрите здесь:

C++ Удалить ненужную информацию в конце файла, не создавая другой файл
Подскажите как считать пробел! C++
C++ Считать 2 слова из файла через пробел и сравнить их со словом No или Yes
Как считать матрицу 3*3 из файла если он там задан неправильно C++
C++ Как побайтно считать информацию из исполняемого файла
getline() (не получается считать информацию с файла) C++
C++ Как считать матрицы из файла, если их несколько и они разного размера?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
=TrappeR=
3 / 3 / 1
Регистрация: 02.12.2008
Сообщений: 11
03.12.2008, 16:06     Как считать информацию из файла, если в конце стоит пробел? #2
Для этого лучше использовать цикл do while, в котором считываем посимвольно из потока в буфер и формируем число. Посмотри код, там все довольно понятно. Если что не ясно, спрашивай.
Код
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
int main( )
{
    FILE *fin;
    if ((fin = fopen("file.txt", "a+")) == NULL) {
        perror("file.txt");
        getch( );
        return 1;
    }

    int mas[100], i, digit;
    char buf;
    i = digit = 0;
    do {
        buf = fgetc(fin);
        if (isdigit(buf)) {
            /* формирование чисел */
            if (digit != 0)
                digit *= 10;
            digit += (int(buf) - int('0'));
        } else {  /* любой символ кроме числа */
            /* сохранение числа и вывод на экран */
            if (digit != 0) {
                mas[i++] = digit;
                printf("%d ", digit);
                digit = 0;
            }
        }
    } while (buf != EOF);

    fclose(fin);
    getch( );
    return 0;
}
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
05.12.2008, 21:12  [ТС]     Как считать информацию из файла, если в конце стоит пробел? #3
Спасибо!
Но я ещё не знаю библиотеку <ctype.h> и функции, находящиеся в ней.
Неужели нельзя реализовать это со стандартной библиотекой?
=TrappeR=
3 / 3 / 1
Регистрация: 02.12.2008
Сообщений: 11
09.12.2008, 07:10     Как считать информацию из файла, если в конце стоит пробел? #4
Спасибо!
Но я ещё не знаю библиотеку <ctype.h> и функции, находящиеся в ней.
Неужели нельзя реализовать это со стандартной библиотекой?
Файл ctype.h содержит функции и макросы проверки, и преобразования символов. В данном проекте необходим для функции isdigit(buf), возвращающей не 0, если buf - цифра.
Если ты под стандартной библиотекой имеешь в виду stdlib.h, то она служит для работы со строками и памятью. На будущее: если сомневаешься в какой-либо библиотеке, комментирую ее и смотри как отреагирует компилятор.
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
12.12.2008, 02:11  [ТС]     Как считать информацию из файла, если в конце стоит пробел? #5
Цитата Сообщение от =TrappeR= Посмотреть сообщение
Файл ctype.h содержит функции и макросы проверки, и преобразования символов. В данном проекте необходим для функции isdigit(buf), возвращающей не 0, если buf - цифра.
Если ты под стандартной библиотекой имеешь в виду stdlib.h, то она служит для работы со строками и памятью. На будущее: если сомневаешься в какой-либо библиотеке, комментирую ее и смотри как отреагирует компилятор.
Я имел ввиду без библиотеки stdlib.h.
Здесь, впринципе, учитывая что в качестве пробела пишется число -858993460, можно сделать проверку последнего элемента массива на это число и удалить его из массива если оно есть, но это не очень правильно - ведь если в файле в конце стоит это само число и пробела нет, то оно удалится.
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.12.2008, 07:18     Как считать информацию из файла, если в конце стоит пробел? #6
обрати внимание съедает символы пустого пространства после каждого ввода если они есть
Код
    for (i = 0; fscanf(fin, "%d ", &mas[i]) == 1; n++, i++)
        ;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2008, 03:57     Как считать информацию из файла, если в конце стоит пробел?
Еще ссылки по теме:

Как считать информацию с файла C++
Как считать информацию с текстового файла? C++
C++ Не получается считать из файла информацию
Считать информацию из с файла массив посимвольно C++
Записать и считать информацию из бинарного файла C++

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

Или воспользуйтесь поиском по форуму:
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
14.12.2008, 03:57  [ТС]     Как считать информацию из файла, если в конце стоит пробел? #7
Спасибо!
Yandex
Объявления
14.12.2008, 03:57     Как считать информацию из файла, если в конце стоит пробел?
Ответ Создать тему
Опции темы

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