Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/40: Рейтинг темы: голосов - 40, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 57
1

if (feof(stdin)) while(!feo(stdin)) while(!feof(stdin) )

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

Как с ними правильно работать в Си??
Объясните принцип пожалуйста?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2010, 14:20
Ответы с готовыми решениями:

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

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

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

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

15
4848 / 3269 / 466
Регистрация: 10.12.2008
Сообщений: 10,569
07.11.2010, 14:24 2
feof() проверяет флаг, флаг выставляют функции, в случае ошибки чтения выставляется другой флаг, который можно проверить с помощью ferror()
если произошла ошибка чтения, то флаг конца файла выставлен не будет
поэтому while (feof(any_file_stream)) - неправильное условие, так как цикл может повиснуть на ошибке
0
1561 / 1039 / 93
Регистрация: 17.04.2009
Сообщений: 2,995
07.11.2010, 14:26 3
Тут описание есть feof. В кратце суть, что feof вернет истину, когда его аргумент дойдет до символа конца строки.
0
4848 / 3269 / 466
Регистрация: 10.12.2008
Сообщений: 10,569
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");
0
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 57
07.11.2010, 14:29  [ТС] 5
они работают с типом FILE*?
через них можно поместить в FILE и потом из него извлечь вводимые данные?
0
4848 / 3269 / 466
Регистрация: 10.12.2008
Сообщений: 10,569
07.11.2010, 14:29 6
Цитата Сообщение от KuKu Посмотреть сообщение
Тут описание есть feof. В кратце суть, что feof вернет истину, когда его аргумент дойдет до символа конца строки.
наверное опечатка, типа "символа конца файла"
на самом деле флаг конца файла выставится функцией чтения, и он выставится тогда, когда символов в файле больше не будет (а то, как это определяется, зависит от системы)
0
1561 / 1039 / 93
Регистрация: 17.04.2009
Сообщений: 2,995
07.11.2010, 14:30 7
accept, да, символ конца файла хотел написать.
0
4848 / 3269 / 466
Регистрация: 10.12.2008
Сообщений: 10,569
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.
0
1561 / 1039 / 93
Регистрация: 17.04.2009
Сообщений: 2,995
07.11.2010, 14:32 9
Цитата Сообщение от accept Посмотреть сообщение
наверное опечатка, типа "символа конца файла"
на самом деле флаг конца файла выставится функцией чтения, и он выставится тогда, когда символов в файле больше не будет (а то, как это определяется, зависит от системы)
вродь конец файла эта последовательность двух(или не двух ... ) каких то символов, хотя могу ошибаться.
0
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 57
07.11.2010, 14:35  [ТС] 10
суть в в том что мне надо вводить данные до тех пор пока я не нажму ctrl z (это !=EOF)
а потом извлечь эти данные и подставить в нужную мне формулу которая сможет изменятся из за количества введенных данных.
как это можно реализовать?скажем для x y,x1 y1,x2 y2, итд
0
1561 / 1039 / 93
Регистрация: 17.04.2009
Сообщений: 2,995
07.11.2010, 14:38 11
while(feof(!(cin>>x>>y))) - вродь как то так, точно не помню.
0
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 57
07.11.2010, 14:43  [ТС] 12
Цитата Сообщение от KuKu Посмотреть сообщение
while(feof(!(cin>>x>>y))) - вродь как то так, точно не помню.
что такое cin?
0
4848 / 3269 / 466
Регистрация: 10.12.2008
Сообщений: 10,569
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++
0
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 ) эти данные я должен поставить в формулу для проверки(принадлежности точки)
0
4848 / 3269 / 466
Регистрация: 10.12.2008
Сообщений: 10,569
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() не вернёт два
0
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 57
07.11.2010, 16:13  [ТС] 16
может кто нибудь поможет с Определить попадание точки в многоугольник
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.11.2010, 16:13

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Проблема с stdin
Когда ввожу 1 2RRLLUDDULU То работает Если ввожу 1 2

Библиотека stdin
Наткнулся в вопросе к экзамену на библиотеку stdin. До этого ни разу с ней не работал. Поискал...

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

Stdio с fgets, stdin
Здравствуйте, нужна помощь с библиотекой stdio, проблема заключается в том, что stdin в...


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

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

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