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

Как пропустить все символы до конца строки? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 5.00
trueherofromad
1 / 1 / 0
Регистрация: 06.12.2009
Сообщений: 59
23.10.2010, 20:03     Как пропустить все символы до конца строки? #1
Проблема в том,что я считываю командой fgets максимум 1000 символов (пишу мини шел), и если на вход подается строчка длиной больше 1000 символов, то у меня читает 1000,выдает сообщение,что неправильная команда, а потом вместо того,чтобы начать читать новую строку, продолжает читать все из этой же строки, понятия не имеи на кой фиг препод подавал ей такие жесткие тесты, но не подскажите как это исправить, знаю что есть команда, которая при чтении файлов перемещает текущую позицию в файле, но я не помню где про это читал ))

Если короче,то просто: "Как пропустить все символы до конца строки?"
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2010, 20:03     Как пропустить все символы до конца строки?
Посмотрите здесь:

C++ удалить со строки все повторяющиеся символы
C++ Не получается чтобы он все символы с текста читал и типа счетчика который считает одинаковые символы как один и плюсует их....Как сделать правильно???
C++ как поменять все символы строки на следующие?
Разработать алгоритм и программу для разбиения текста на строки (как признак конца строки в тексте использовать символ @) C++
C++ Определить длину строки,удалить из строки все символы, которые равны заданному
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
smithy69
17 / 16 / 1
Регистрация: 06.11.2009
Сообщений: 167
23.10.2010, 20:45     Как пропустить все символы до конца строки? #2
есть такая функция eof(end of file). true когда достигнут конец файла, ну или строки.
trueherofromad
1 / 1 / 0
Регистрация: 06.12.2009
Сообщений: 59
23.10.2010, 20:51  [ТС]     Как пропустить все символы до конца строки? #3
Спасибо,конечно, но я же сказал, что я мини шелл пишу, а не учусь 2 и 2 складывать)) Причем тут EOF и конец строки вообще? Я вообще-то свою проблему могу решить тупо тем,что если все 1000 символов считались, то дальше тупо гетчарами жду \n, но хотелось бы как-то по взрослому проблему решить.
И,чувак, EOF это константа!
smithy69
17 / 16 / 1
Регистрация: 06.11.2009
Сообщений: 167
23.10.2010, 21:24     Как пропустить все символы до конца строки? #4
уверен что только константа?))
trueherofromad
1 / 1 / 0
Регистрация: 06.12.2009
Сообщений: 59
23.10.2010, 22:53  [ТС]     Как пропустить все символы до конца строки? #5
man eof ничего не выдало, и вообще как эта потенциально существующая функция относится к вопросу (и вообще вопрос закрыт, т.к. уже отправил программу в тестирующую систему и все норм )
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.10.2010, 23:29     Как пропустить все символы до конца строки? #6
Цитата Сообщение от smithy69 Посмотреть сообщение
уверен что только константа?
Ага, константа. Объявлена в stdio.h
C
1
#define EOF     (-1)
есть функция feof(FILE *), которая возвращает 1, если в структуре, переданной параметром, установлен флаг eof.

Цитата Сообщение от trueherofromad Посмотреть сообщение
man eof ничего не выдало, и вообще как эта потенциально существующая функция относится к вопросу
man feof что-нибудь выдаст
Хотя на самом деле проверять stdin на EOF - не очень интересное занятие. Если всё так плохо, что буфера в 1000 символов не хватает для команды, задаваемой в строке, прийдётся массив строк делать. Но это ерунда какая-то, скажите преподу, чтобы фигнёй не страдал. Если команда в буфер не помещается, самое разумное - выдать ошибку...
trueherofromad
1 / 1 / 0
Регистрация: 06.12.2009
Сообщений: 59
24.10.2010, 00:53  [ТС]     Как пропустить все символы до конца строки? #7
Цитата Сообщение от easybudda Посмотреть сообщение
Ага, константа. Объявлена в stdio.h
Если всё так плохо, что буфера в 1000 символов не хватает для команды, задаваемой в строке, прийдётся массив строк делать. Но это ерунда какая-то, скажите преподу, чтобы фигнёй не страдал. Если команда в буфер не помещается, самое разумное - выдать ошибку...
Да в этом и весь прикол, у меня выдает ошибку, но есть строка 2500 символов, то ошибку выдаст 3 раза, а если 3003 символов, то выдаст 3 ошибки, и если последние три символа правильно,то потом их выполнит, а должно тупо вылетать с одной ошибкой....
Вообще все это фигня, я уже сделал, тупо считывал гетчаром нигде не храня данные до конца строки и все...

Просто хотелось бы вспомнить ту команду,которая меняет позицию в расматриваемом файле, т.к. стандартный ввод это тупо файл, если кто не знал...

А препод фигней не страдает), он просто так принимает лабы, что если хотя когда-то она падает или хоть чуть-чуть не так делает, то можно только на 3 сдать, и то если больше ошибок нет, лол))) В его бы руки виндоус 98 )))

P.S. МАИ, 8-ой фак, если не хотите такого, не ходите туда)))
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
24.10.2010, 01:47     Как пропустить все символы до конца строки? #8
Цитата Сообщение от trueherofromad Посмотреть сообщение
А препод фигней не страдает), он просто так принимает лабы, что если хотя когда-то она падает или хоть чуть-чуть не так делает, то можно только на 3 сдать, и то если больше ошибок нет
Ну в принципе-то правильно...

Цитата Сообщение от trueherofromad Посмотреть сообщение
у меня выдает ошибку, но есть строка 2500 символов, то ошибку выдаст 3 раза
вот так даже исправиться позволяет
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
#include <stdio.h>
#include <stdlib.h>
 
#define BUF_LEN 8
#define MASK "%7[^\n]%c"
 
int main(void){
    char buf[BUF_LEN], ch;
    
    while ( 1 ){
        printf("> ");
        if ( scanf(MASK, buf, &ch) != 2 ){
            fprintf(stderr, "Can't get some command!\n");
            exit(1);
        }
        if ( ch != '\n' ){
            fprintf(stderr, "The command is too long!\n");
            fpurge(stdin);
            continue;
        }
        if ( ! strcmp(buf, "quit") ){
            printf("Bye!\n");
            exit(0);
        }
        printf("Processing %s\n", buf);
    }
}
Как пропустить все символы до конца строки?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2010, 07:09     Как пропустить все символы до конца строки?
Еще ссылки по теме:

Задана строка, символы которой могут повторяться. Нужно удалить все символы строки с помощью наименьшего количества вычеркиваний C++
Преобразовать символы табуляции и конца строки в escape последовательности символов C++
C++ Убрать все повторяющиеся символы со строки

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

Или воспользуйтесь поиском по форуму:
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.10.2010, 07:09     Как пропустить все символы до конца строки? #9
Цитата Сообщение от trueherofromad
Проблема в том,что я считываю командой fgets максимум 1000 символов (пишу мини шел), и если на вход подается строчка длиной больше 1000 символов
"строчка" для fgets - последовательность символов, оканчивающаяся '\n'

если получена последовательность без '\n', нужно выдать сообщение об ошибке
указатель для stdin'а не работает, есть только ungetc(), которая гарантирует возврат одного символа

C
1
2
3
4
5
    while ((c = getchar()) != EOF && c != '\n')
        ;
 
    if (c == EOF && ferror(stdin))
        ;
Yandex
Объявления
24.10.2010, 07:09     Как пропустить все символы до конца строки?
Ответ Создать тему
Опции темы

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