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

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

Войти
Регистрация
Восстановить пароль
 
Datebailo
0 / 4 / 1
Регистрация: 13.05.2016
Сообщений: 58
#1

Нестабильная работа программы при большом количестве строк во входном потоке - C++

24.11.2016, 19:25. Просмотров 208. Ответов 12
Метки нет (Все метки)

Вопрос с подвохом: пользователь вставляет n строк символов в консоль, где n > 1000. Задание - сделать так, чтобы программа не зависала и не вылетала.

C++
1
2
3
4
5
while (true) {
        cout << "Уведіть строку [cin]: "; //поток STL
        getline(cin, a);
        cout << "Ваша строка [cout]:" << a << endl;
                cin.clear();
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2016, 19:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нестабильная работа программы при большом количестве строк во входном потоке (C++):

не работает на большом количестве - C++
здравствуйте! Программа сравнивает наличие строки из файла &quot;наречия.txt&quot; в файле &quot;словарь.txt&quot;. Причем в &quot;наречия.txt&quot; слова представлены...

Теория о входном и выходном потоке - C++
Помогите пожалуйста найти теорию о входном и выходном потоке.

Как избавится от слов во входном потоке? - C++
Как избавится от слов во входном потоке? Программа должна считать (сохранение не обязательно) и подсчитать кол. слов до слова &quot;done&quot;....

Проверка на наличие числового значения во входном потоке - C++
Доброе времени суток. Задача: вводится трехзначное число (int), нужно разделить его цифры и вывести их в столбик. Пример: число 321....

Как узнать есть ли сволы во входном потоке? - C++
Как узнать есть ли сволы во входном потоке? :cry:

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
gru74ik
Модератор
Эксперт CЭксперт С++
4154 / 1780 / 197
Регистрация: 20.02.2013
Сообщений: 4,901
Записей в блоге: 21
24.11.2016, 19:38 #2
Datebailo, несколько вопросов:
  1. какой тип у переменной a?
  2. цикл бесконечный - это так и задумано?
  3. cout, cin, endl, getline - из пространства имён std или какие-то свои собственные (определённые пользователем)?
  4. закрывающая фигурная скобка у цикла где?

Добавлено через 4 минуты
Цитата Сообщение от Datebailo Посмотреть сообщение
пользователь вставляет n строк символов в консоль, где n > 1000.
Не вижу, где там n. Вижу что пользователю предлагается ввести a бесконечное количество раз (в бесконечном цикле).

Добавлено через 2 минуты
Цитата Сообщение от Datebailo Посмотреть сообщение
Вопрос с подвохом
Вам чего надо-то? Викторину устроить решили? Призы будут? Или так, "на слабо"?
Datebailo
0 / 4 / 1
Регистрация: 13.05.2016
Сообщений: 58
24.11.2016, 19:39  [ТС] #3
gru74ik,
1. Тип переменной - string.
2. Да, чтобы пользователь вводил текст - ему он выводился, и так пока он не сдастся и не выйдет из программы с помощью крестика вверху.
3. std, и желательно использовать только std
4. После cin.clear();
5. n - это не переменная, это просто определенное число строк, оно не определяется в программе. Просто пользователь захотел вставить большее тысячи строк, он получит ответку - свои тысячу строк. Когда я вставляю тысячу строк - у меня он долго их печатает (издавая стремные звуки), а потом зависает.

пЫсЫ: если можно как-то ограничить объем вставляемых символов - это тоже можно. Главное чтобы не вылетало.
stima
464 / 313 / 26
Регистрация: 22.03.2011
Сообщений: 1,026
Завершенные тесты: 2
24.11.2016, 19:41 #4
+1 к gru74ik, но можно так
C++
1
2
std::string input;
std::getline(std::cin, input);
Добавлено через 58 секунд
п.с. Вы уверены что вылет именно из-за чтения?
Datebailo
0 / 4 / 1
Регистрация: 13.05.2016
Сообщений: 58
24.11.2016, 19:44  [ТС] #5
stima,
Вставляем текст в консоль -> текст долго появляется в консоли со стремными звуками -> вылет
Видимо из-за этого, да.

ПыСы: у меня в коде тоже самое .-.
stima
464 / 313 / 26
Регистрация: 22.03.2011
Сообщений: 1,026
Завершенные тесты: 2
24.11.2016, 19:46 #6
Код в студию (весь), тут телепатов нет.
Datebailo
0 / 4 / 1
Регистрация: 13.05.2016
Сообщений: 58
24.11.2016, 19:49  [ТС] #7
Охх...

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
28
29
30
31
32
33
34
// ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <string>
 
 
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);   
    string a;
    char b[10000];        
    while (true) {
        cout << "Уведіть строку [cin]: "; //поток STL
        getline(cin, a);
        cout << "Ваша строка [cout]:" << a << endl;
        fflush(stdin);
        cin.clear();
        cout << "Уведіть строку [scanf]: ";
        fgets(b, 10000, stdin); 
        printf("Ваша строка [printf]: ");
        printf("%s", b);
        printf("\n");
 
    }
    system("pause");
    return 0;
}
stima
464 / 313 / 26
Регистрация: 22.03.2011
Сообщений: 1,026
Завершенные тесты: 2
24.11.2016, 19:51 #8
Так вот, уверены что не вылазите за граници массива char[10000] ?
Datebailo
0 / 4 / 1
Регистрация: 13.05.2016
Сообщений: 58
24.11.2016, 19:53  [ТС] #9
stima, удалил часть кода с b, все равно не работает. Я не кидал полный код, потому что речь шла как раз о первой переменной.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);   
    string a;
//  char b[10000];        
    while (true) {
        cout << "Уведіть строку [cin]: "; //поток STL
        getline(cin, a);
        cout << "Ваша строка [cout]:" << a << endl;
        fflush(stdin);
        cin.clear();
    //  cout << "Уведіть строку [scanf]: ";
    //  fgets(b, 10000, stdin); 
    //  printf("Ваша строка [printf]: ");
    //  printf("%s", b);
    //  printf("\n");
 
    }
    system("pause");
    return 0;
}
nd2
2213 / 1785 / 622
Регистрация: 29.01.2016
Сообщений: 5,728
24.11.2016, 19:57 #10
Цитата Сообщение от Datebailo Посмотреть сообщение
удалил часть кода с b, все равно не работает.
Это тогда тоже убери:
Цитата Сообщение от Datebailo Посмотреть сообщение
C++
1
2
fflush(stdin); 
cin.clear();
Datebailo
0 / 4 / 1
Регистрация: 13.05.2016
Сообщений: 58
24.11.2016, 19:58  [ТС] #11
nd2, ничего не изменилось.
gru74ik
Модератор
Эксперт CЭксперт С++
4154 / 1780 / 197
Регистрация: 20.02.2013
Сообщений: 4,901
Записей в блоге: 21
24.11.2016, 20:04 #12
Datebailo, прекрасно выводит 1200 строк на экран:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
 
int main()
{
    std::string a = "a";
 
    for ( size_t i = 1; i < 301; ++i )
    {
        std::cout << "Set of 40 strings #" << i << ":\n";
        for ( size_t j = 1; j < 41; ++j )
        {
            std::cout << a << j <<" ";
        }
        std::cout << "\n\n";
    }
 
    return 0;
}
Добавлено через 2 минуты
Datebailo, если есть охота вручную вбивать больше тысячи строк, то вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
 
int main()
{
    std::string a = "a";
 
    for ( size_t i = 0; i < 1200; ++i )
    {
        std::cout << "Enter your string: ";
        std::getline( std::cin, a );
    }
 
    return 0;
}
nd2
2213 / 1785 / 622
Регистрация: 29.01.2016
Сообщений: 5,728
24.11.2016, 20:19 #13
Цитата Сообщение от Datebailo Посмотреть сообщение
nd2, ничего не изменилось.
Я и не обещал. Просто там это лишнее.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2016, 20:19
Привет! Вот еще темы с ответами:

QTableView зависает на большом количестве строк - Python
При добавлении в таблицу большого количества данных зависает виджет QTableVIew. Когда данные загрузились я их вижу, но стоит мне скроллом...

Подсчет количества строк во входном потоке - C (СИ)
#include &lt;stdio.h&gt; /* подсчет строк входного потока */ main() { int с, nl; nl = 0; while ((с = getchar()) != EOF) if (c ==...

Подсчет строк, слов и символов во входном потоке - C (СИ)
В книге Кернигана и Ритчи надо вставлять значения 1 0. Правда и ложь. Наверное я читаю код неправильно #include &lt;stdio.h&gt; int main()...

Не ляжет ли БД при большом количестве запросов - MySQL
Увидел такой коммент на одном из ресурсов Добрый день, Андрей. Я пытался на сайте реализовать поиск по дополнительным полям без...


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

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

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