Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 23
1

Бесконечный цикл и EOF в VS 2013

05.08.2014, 09:34. Показов 2272. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string>
#include <cstdlib>
#include <vector>
 
using namespace std;
int main(void)
{
    int n;
    while (cin >> n) // при while (scanf("%d", &n) != EOF) таже песня
    {
        cout << "lolwhut?" << endl;
    }
    cout << "bggggg";
    return 0;
}

При запуске на VS 2013 бесконечный цикл. При запуске на онлайн компиляторе сразу выводит "bggggg". Как я понимаю, что-то со студией. Можно с этим как-то исправиться без замены компилятора?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.08.2014, 09:34
Ответы с готовыми решениями:

Как реализовать бесконечный цикл While, но чтобы этот цикл не грузил процессор?
Допустим есть цикл: while (1) { ... } Как сделать так, чтобы бесконечный цикл не...

Цикл do/while. Страница в браузере, уходит в бесконечный цикл и ничего не выводит.
Помогите, страница в браузере, как я понял, уходит в бесконечный цикл и ничего не выводит. Если...

Почему цикл на при 1 уходит в бесконечный цикл?
#define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; int...

Цикл while c выходом по EOF со странным поведением
Здравствуйте, вот этот фрагмент кода меня ввел в заблуждение: #include &lt;stdio.h&gt; int...

15
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
05.08.2014, 09:38 2
Renevity, попробуйте так.
C++
1
while ((с = getchar()) != EOF)
1
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 23
05.08.2014, 09:55  [ТС] 3
Аналогичная ситуация, только "lolwhut?" выводит аж 2 раза.
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
05.08.2014, 09:58 4
Renevity, а что вы вводите?
0
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 23
05.08.2014, 11:44  [ТС] 5
Цитата Сообщение от S_el Посмотреть сообщение
Renevity, а что вы вводите?
Целые числа/число, ну и символы тоже пробовал
0
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
05.08.2014, 11:57 6
Renevity, что типа такого:
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
#include <iostream>
#include <string>
 
using namespace std;
 
bool isZero(string number) {
    for (int i = 0; i < number.length(); i++) {
        if (number[i] != '0') return false;
    }
    return true;
}
 
int main() {
    int n;
    string buffer;
    while (true) {
        getline(cin, buffer);
        n = atoi(buffer.c_str());
        if (n == 0 && !isZero(buffer)) break;
 
        //Other code
        cout << "Entered number: " << n << endl;
    }
    cout << "End.";
    return 0;
}
1
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
05.08.2014, 12:00 7
Лучший ответ Сообщение было отмечено Renevity как решение

Решение

Renevity, пробуйте так,напишите,что выведет.

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
int main(void)
{
    char n;
    while (cin.get(n)) 
    {
        cout<<n<< endl;
    }
    cout << "bggggg";
    return 0;
}
Цикл должен отрабатывать,пока вы не введете Ctrl+^Z.

Добавлено через 1 минуту
QGuest, а зачем здесь функция isZero?
1
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
05.08.2014, 12:04 8
Цитата Сообщение от S_el Посмотреть сообщение
QGuest, а зачем здесь функция isZero?
функция atoi возвращает ноль если строка buffer будет вмещать в себе число 0, а также, если buffer вообще не будет числом.
То-есть, без этой проверки такой ввод будет неправильным и цикл завершится: 000000.
1
34 / 34 / 8
Регистрация: 13.06.2014
Сообщений: 509
05.08.2014, 12:19 9
Цитата Сообщение от Renevity Посмотреть сообщение
while (cin >> n)
а можно спросить в чем тут вообще смысл условия?
по-моему с таким условием цикл и должен быть бесконечным
0
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 23
05.08.2014, 12:23  [ТС] 10
О чорд. Во время ввода в цикле выводит число, а если ввести Ctrl + C, то слово.

Получается я неправильно понял, как работает EOF. Там где я читал об этом не было сказано о завершении цикла комбинацией клавиш. Но всё-равно спасибо, теперь я понимаю, как это работает.
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
05.08.2014, 12:39 11
Цитата Сообщение от frostyfull Посмотреть сообщение
а можно спросить в чем тут вообще смысл условия?
Оператор возвращает ссылку на поток,

http://www.cplusplus.com/refer... tor%3E%3E/

у потока есть оператор bool

http://www.cplusplus.com/refer... ator_bool/

В итоге цикл будет выполняться, пока не будет введено что-то отличное от числа.
0
34 / 34 / 8
Регистрация: 13.06.2014
Сообщений: 509
05.08.2014, 13:43 12
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
В итоге цикл будет выполняться, пока не будет введено что-то отличное от числа.
это я уже понял, скомпилировав у себя и потестив программу)

но все же мне не понятно построение условия cin >> n и все, ни разу так не делал)
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
05.08.2014, 14:18 13
Цитата Сообщение от frostyfull Посмотреть сообщение
cin >> n
Если рассматривать оператор как функцию, у которой есть возвращаемое значение, становится понятнее.
0
34 / 34 / 8
Регистрация: 13.06.2014
Сообщений: 509
05.08.2014, 14:25 14
uglyPinokkio, дак ведь если считывать допустим символ в переменную типа инт, туда запишется код, и все равно будет число, или я ошибаюсь?
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
05.08.2014, 14:29 15
Цитата Сообщение от frostyfull Посмотреть сообщение
дак ведь если считывать допустим символ в переменную типа инт, туда запишется код, и все равно будет число, или я ошибаюсь?
Будет ошибка преобразования в число, оператор bool вернет false.
0
34 / 34 / 8
Регистрация: 13.06.2014
Сообщений: 509
05.08.2014, 16:23 16
uglyPinokkio, а ну да, я уже плохо помню, но последний раз, когда писал программу с вводом чисел, делал проверку на ввод символа, на я делал проверку просто по таблице аски со считыванием в обычную строку, прямо в инт не считываю никогда
0
05.08.2014, 16:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.08.2014, 16:23
Помогаю со студенческими работами здесь

При вводе данных цикл по поиску EOF в Getchar не останавливается
Здраствуйте, вот такая проблема: #include &lt;stdio.h&gt; main() { int nc=0; while(getchar()...

Почему цикл с условием EOF читает последний символ 2 раза?
Данная программа читает двоичную строку и выводит длину самой продолжительной цепочки нулей....

Бесконечный цикл
#include &lt;iostream&gt; #include &lt;climits&gt; bool is_int(double); int main() { using namespace...

Бесконечный цикл
Добрый день, имеется такой код, который запускает tshark на 100 секунд и создает файл с датой и...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru