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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.75
Gun#
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 57
07.11.2010, 14:20     if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) ) #1
Как с ними правильно работать в Си??
Объясните принцип пожалуйста?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2010, 14:20     if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) )
Посмотрите здесь:

stdin, stdout, stderror C++
Поток stdin C++
fflush(stdin) C++
C++ Перевод stdin c файла на клавиатуру
C++ stdin
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.11.2010, 14:24     if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) ) #2
feof() проверяет флаг, флаг выставляют функции, в случае ошибки чтения выставляется другой флаг, который можно проверить с помощью ferror()
если произошла ошибка чтения, то флаг конца файла выставлен не будет
поэтому while (feof(any_file_stream)) - неправильное условие, так как цикл может повиснуть на ошибке
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
07.11.2010, 14:26     if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) ) #3
Тут описание есть feof. В кратце суть, что feof вернет истину, когда его аргумент дойдет до символа конца строки.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.11.2010, 14:27     if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) ) #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  [ТС]     if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) ) #5
они работают с типом FILE*?
через них можно поместить в FILE и потом из него извлечь вводимые данные?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.11.2010, 14:29     if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) ) #6
Цитата Сообщение от KuKu Посмотреть сообщение
Тут описание есть feof. В кратце суть, что feof вернет истину, когда его аргумент дойдет до символа конца строки.
наверное опечатка, типа "символа конца файла"
на самом деле флаг конца файла выставится функцией чтения, и он выставится тогда, когда символов в файле больше не будет (а то, как это определяется, зависит от системы)
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
07.11.2010, 14:30     if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) ) #7
accept, да, символ конца файла хотел написать.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.11.2010, 14:31     if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) ) #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
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
07.11.2010, 14:32     if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) ) #9
Цитата Сообщение от accept Посмотреть сообщение
наверное опечатка, типа "символа конца файла"
на самом деле флаг конца файла выставится функцией чтения, и он выставится тогда, когда символов в файле больше не будет (а то, как это определяется, зависит от системы)
вродь конец файла эта последовательность двух(или не двух ... ) каких то символов, хотя могу ошибаться.
Gun#
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 57
07.11.2010, 14:35  [ТС]     if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) ) #10
суть в в том что мне надо вводить данные до тех пор пока я не нажму ctrl z (это !=EOF)
а потом извлечь эти данные и подставить в нужную мне формулу которая сможет изменятся из за количества введенных данных.
как это можно реализовать?скажем для x y,x1 y1,x2 y2, итд
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
07.11.2010, 14:38     if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) ) #11
while(feof(!(cin>>x>>y))) - вродь как то так, точно не помню.
Gun#
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 57
07.11.2010, 14:43  [ТС]     if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) ) #12
Цитата Сообщение от KuKu Посмотреть сообщение
while(feof(!(cin>>x>>y))) - вродь как то так, точно не помню.
что такое cin?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.11.2010, 14:45     if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) ) #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  [ТС]     if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) ) #14
мне нужно минимально 3 координаты (x y,x1 y1,x2 y2)
скажем я закончил ввод на x y,x1 y1 он мне выпишет вы ввели мало значений.или скажем ввел вместо цифры букву.
этот метод мне надо реализовать тут Определить попадание точки в многоугольник
1 ) первое что мне нужно это ввести данные которые проверят правильность условия(выпуклости многоугольника)
2 ) эти данные я должен поставить в формулу для проверки(принадлежности точки)
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.11.2010, 15:40     if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) ) #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, 16:13     if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) )
Еще ссылки по теме:

C++ std::fflush(stdin);
C++ Код после while( ! feof( stdin ) не компилируется
C++ Библиотека stdin

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

Или воспользуйтесь поиском по форуму:
Gun#
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 57
07.11.2010, 16:13  [ТС]     if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) ) #16
может кто нибудь поможет с Определить попадание точки в многоугольник
Yandex
Объявления
07.11.2010, 16:13     if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) )
Ответ Создать тему
Опции темы

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