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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.75
Gun#
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 57
#1

if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) ) - C++

07.11.2010, 14:20. Просмотров 4672. Ответов 15
Метки нет (Все метки)

Как с ними правильно работать в Си??
Объясните принцип пожалуйста?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2010, 14:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) ) (C++):

Код после while( ! feof( stdin ) не компилируется - C++
Большая программа не работала. Решила протестировать её отдельные куски. И нашла вот такую ошибку. Код после этого цикла while( ! feof(...

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

Поток stdin - C++
Доброго времени суток. Ситуация следующая: пытаюсь расширить свои знания в программировании на С++, поэтому начал читать книгу Коплиена...

Библиотека stdin - C++
Наткнулся в вопросе к экзамену на библиотеку stdin. До этого ни разу с ней не работал. Поискал информацию в интернете, но ничего внятного о...

fflush(stdin) - C++
В одной из ранее открытых тем, было сказано, что fllush(stdin) лучше не использовать. Чем можно заменить эту функцию?

std::fflush(stdin); - C++
std::fflush(stdin); что делает эта функция?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.11.2010, 14:24 #2
feof() проверяет флаг, флаг выставляют функции, в случае ошибки чтения выставляется другой флаг, который можно проверить с помощью ferror()
если произошла ошибка чтения, то флаг конца файла выставлен не будет
поэтому while (feof(any_file_stream)) - неправильное условие, так как цикл может повиснуть на ошибке
KuKu
1557 / 1035 / 77
Регистрация: 17.04.2009
Сообщений: 2,981
07.11.2010, 14:26 #3
Тут описание есть feof. В кратце суть, что feof вернет истину, когда его аргумент дойдет до символа конца строки.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.11.2010, 14:27 #4
делают так (в K&R2)

C
1
2
3
4
5
    while ((c = getc(any_file_stream)) != EOF)
        doings;
 
    if (ferror(any_file_stream))
        fprintf(stderr, "error: in reading" "\n");
Gun#
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 57
07.11.2010, 14:29  [ТС] #5
они работают с типом FILE*?
через них можно поместить в FILE и потом из него извлечь вводимые данные?
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.11.2010, 14:29 #6
Цитата Сообщение от KuKu Посмотреть сообщение
Тут описание есть feof. В кратце суть, что feof вернет истину, когда его аргумент дойдет до символа конца строки.
наверное опечатка, типа "символа конца файла"
на самом деле флаг конца файла выставится функцией чтения, и он выставится тогда, когда символов в файле больше не будет (а то, как это определяется, зависит от системы)
KuKu
1557 / 1035 / 77
Регистрация: 17.04.2009
Сообщений: 2,981
07.11.2010, 14:30 #7
accept, да, символ конца файла хотел написать.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.11.2010, 14:31 #8
Цитата Сообщение от Gun# Посмотреть сообщение
они работают с типом FILE*?
через них можно поместить в FILE и потом из него извлечь вводимые данные?
FILE - это структура (можешь открыть stdio.h и найти, где её делают)
там же можешь посмотреть какие внутри есть флажки
эти функции только обращаются к флажку и проверяют его

примерно так

C
1
2
3
4
5
6
    FILE *ifp;
    int value;
 
    ...
 
    value = ifp->someflag != 0;
устанавливают флажки функции чтения, в данном случае getc(), или fgets(), или scanf()
функция сама поставит то, что надо, если там конец файла, то поставит конец файла, а если там ошибка, то поставит ошибку

есть функция clearerr() - сбрасывает оба флажка

C89
Код
4.9.10.1 The clearerr function

Synopsis

         #include <stdio.h>
         void clearerr(FILE *stream);

Description

   The clearerr function clears the end-of-file and error indicators
for the stream pointed to by stream .

Returns

   The clearerr function returns no value.
KuKu
1557 / 1035 / 77
Регистрация: 17.04.2009
Сообщений: 2,981
07.11.2010, 14:32 #9
Цитата Сообщение от accept Посмотреть сообщение
наверное опечатка, типа "символа конца файла"
на самом деле флаг конца файла выставится функцией чтения, и он выставится тогда, когда символов в файле больше не будет (а то, как это определяется, зависит от системы)
вродь конец файла эта последовательность двух(или не двух ... ) каких то символов, хотя могу ошибаться.
Gun#
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 57
07.11.2010, 14:35  [ТС] #10
суть в в том что мне надо вводить данные до тех пор пока я не нажму ctrl z (это !=EOF)
а потом извлечь эти данные и подставить в нужную мне формулу которая сможет изменятся из за количества введенных данных.
как это можно реализовать?скажем для x y,x1 y1,x2 y2, итд
KuKu
1557 / 1035 / 77
Регистрация: 17.04.2009
Сообщений: 2,981
07.11.2010, 14:38 #11
while(feof(!(cin>>x>>y))) - вродь как то так, точно не помню.
Gun#
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 57
07.11.2010, 14:43  [ТС] #12
Цитата Сообщение от KuKu Посмотреть сообщение
while(feof(!(cin>>x>>y))) - вродь как то так, точно не помню.
что такое cin?
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.11.2010, 14:45 #13
C
1
2
3
4
5
    while ((c = getc(any_file_stream)) != EOF)
        doings;
 
    if (ferror(any_file_stream))
        fprintf(stderr, "error: in reading" "\n");
Цитата Сообщение от Gun#
скажем для x y,x1 y1,x2 y2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    int x[100], y[100], count;
    int i;
 
    for (i = 0; scanf("%d %d", &x[i], &y[i]) == 2 && i < 100; i++)
        ;
 
    if (ferror(stdin)) {
        fprintf(stderr, "error: in reading stdin" "\n");
        return EXIT_FAILURE;
    }
 
    count = i;
 
    for (i = 0; i < count; i++)
        printf("x[%d] = %d, y[%d] = %d" "\n", i, x[i], i, y[i]);
Цитата Сообщение от Gun#
что такое cin?
это stdin в C++
Gun#
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 57
07.11.2010, 15:00  [ТС] #14
мне нужно минимально 3 координаты (x y,x1 y1,x2 y2)
скажем я закончил ввод на x y,x1 y1 он мне выпишет вы ввели мало значений.или скажем ввел вместо цифры букву.
этот метод мне надо реализовать тут Определить попадание точки в многоугольник
1 ) первое что мне нужно это ввести данные которые проверят правильность условия(выпуклости многоугольника)
2 ) эти данные я должен поставить в формулу для проверки(принадлежности точки)
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.11.2010, 15:40 #15
Цитата Сообщение от Gun#
мне нужно минимально 3 координаты (x y,x1 y1,x2 y2)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    int inputflag;
 
    inputflag = 1;
    while (inputflag) {
        inputflag = 0;
 
        for (i = 0; scanf("%d %d", &x[i], &y[i]) == 2 && i < 100; i++)
            ;
 
        if (ferror(stdin)) {
            fprintf(stderr, "error: in reading stdin" "\n");
            return EXIT_FAILURE;
        }
 
        count = i;
 
        if (count < 3) {
            printf("enter at least three couples" "\n");
            inputflag = 1;
        }
    }
Добавлено через 2 минуты
Цитата Сообщение от Gun#
ввел вместо цифры букву
тогда scanf() не вернёт два
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2010, 15:40
Привет! Вот еще темы с ответами:

stdin, stdout, stderror - C++
Эти три файловых дискриптора, получаемые программами при запуске они указывают на реальные файлы, который файловая система создает? Когда я...

Перевод stdin c файла на клавиатуру - C++
#include &lt;stdio.h&gt; int x,y; int main(){ freopen(&quot;1.txt&quot;,&quot;r&quot;,stdin); freopen(&quot;2.txt&quot;,&quot;w&quot;,stdout); scanf(&quot;%d&quot;,&amp;x); // ...

си, чтение строки из stdin с пробелами - C++
Доброго времени суток, Надо записать строку в char * str. scanf(&quot;%s&quot;,str) читает до пробела, gets срабатывает сразу при вызове,...

Где определён стандартный поток stdin? - C++
Где определён стандартный поток stdin, в какой библиотеке?. Смотрел в инете ничего не нашёл. ошибка такого рода: «stdin» undeclared...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.11.2010, 15:40
Ответ Создать тему
Опции темы

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