Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 5.00
trueherofromad
1 / 1 / 0
Регистрация: 06.12.2009
Сообщений: 59
#1

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

23.10.2010, 20:03. Просмотров 2732. Ответов 8
Метки нет (Все метки)

Проблема в том,что я считываю командой fgets максимум 1000 символов (пишу мини шел), и если на вход подается строчка длиной больше 1000 символов, то у меня читает 1000,выдает сообщение,что неправильная команда, а потом вместо того,чтобы начать читать новую строку, продолжает читать все из этой же строки, понятия не имеи на кой фиг препод подавал ей такие жесткие тесты, но не подскажите как это исправить, знаю что есть команда, которая при чтении файлов перемещает текущую позицию в файле, но я не помню где про это читал ))

Если короче,то просто: "Как пропустить все символы до конца строки?"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2010, 20:03
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как пропустить все символы до конца строки? (C++):

Следует пропустить только число с оператором IF. Как отфильтровать символы? - C++
Следует пропустить только ЧИСЛО оператором IF. Если пользователем введен(ы) иные символ(ы)- соответственно, отсеиваем. Значит, делая...

Преобразовать символы табуляции и конца строки в escape последовательности символов - C++
Напишите функцию escape(char s,char t), копирующую строку t в s и преобразующую символы типа новая строка и табуляция в "видимые...

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

Перезаписать все строки из исходного файла в новый заменив все символы 'м' на 'М' - C++
Задание элементарное: перезаписать все строки из одного файла в новый заменив все "м" на "M". Я знаю что можно через пару циклов, но...

Не получается чтобы он все символы с текста читал и типа счетчика который считает одинаковые символы как один и плюсует их....Как сделать правильно??? - C++
#include< stdio.h> #include< conio.h> #include< string.h> #include <iostream> #include <fstream> #include <cmath> using...

Определить длину строки,удалить из строки все символы, которые равны заданному - C++
Доброго времени суток уважаемые форумчане. Помогите пожалуйста с написанием кода для данной задачи в вижуале. Если будет возможно,то с...

8
smithy69
17 / 16 / 1
Регистрация: 06.11.2009
Сообщений: 167
23.10.2010, 20:45 #2
есть такая функция eof(end of file). true когда достигнут конец файла, ну или строки.
0
trueherofromad
1 / 1 / 0
Регистрация: 06.12.2009
Сообщений: 59
23.10.2010, 20:51  [ТС] #3
Спасибо,конечно, но я же сказал, что я мини шелл пишу, а не учусь 2 и 2 складывать)) Причем тут EOF и конец строки вообще? Я вообще-то свою проблему могу решить тупо тем,что если все 1000 символов считались, то дальше тупо гетчарами жду \n, но хотелось бы как-то по взрослому проблему решить.
И,чувак, EOF это константа!
0
smithy69
17 / 16 / 1
Регистрация: 06.11.2009
Сообщений: 167
23.10.2010, 21:24 #4
уверен что только константа?))
0
trueherofromad
1 / 1 / 0
Регистрация: 06.12.2009
Сообщений: 59
23.10.2010, 22:53  [ТС] #5
man eof ничего не выдало, и вообще как эта потенциально существующая функция относится к вопросу (и вообще вопрос закрыт, т.к. уже отправил программу в тестирующую систему и все норм )
0
easybudda
Модератор
Эксперт CЭксперт С++
9966 / 5889 / 996
Регистрация: 25.07.2009
Сообщений: 11,149
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 символов не хватает для команды, задаваемой в строке, прийдётся массив строк делать. Но это ерунда какая-то, скажите преподу, чтобы фигнёй не страдал. Если команда в буфер не помещается, самое разумное - выдать ошибку...
0
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-ой фак, если не хотите такого, не ходите туда)))
0
easybudda
Модератор
Эксперт CЭксперт С++
9966 / 5889 / 996
Регистрация: 25.07.2009
Сообщений: 11,149
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);
    }
}
Как пропустить все символы до конца строки?
0
accept
4831 / 3252 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
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))
        ;
0
24.10.2010, 07:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2010, 07:09
Привет! Вот еще темы с ответами:

Разработать алгоритм и программу для разбиения текста на строки (как признак конца строки в тексте использовать символ @) - C++
Разработать алгоритм и программу для разбиения текста на строки (как признак конца строки в тексте использовать символ @). помогите для...

Удалить из строки все повторяющиеся символы - C++
как удалить со строки все повторяющиеся символы???? заранее благодарен!

Убрать все повторяющиеся символы со строки - C++
Всем доброго времени суток. Прошу поправить/добавить/исправить мой код. Вот к нему задание : убрать все повторяющиеся символы. Спасибо тому...

Удалить из строки все числовые символы - C++
Здравствуйте, помогите, пожалуйста сделайте задач. Пользователь вводит с клавиатуры строка символов. Удалить из строка все числовые...


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

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

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