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

Ввод строки в цикле do while

11.04.2020, 23:50. Показов 4759. Ответов 6

Author24 — интернет-сервис помощи студентам
Разработайте программу «Магический шар», которая с помощью генератора случайных
чисел выдает ответ пользователю. Предусмотрите вывод ответов до тех пор, пока
пользователь не даст команду завершения программы.

Я захотел добавить ввод вопроса, но почему-то у меня просто игнорируется эта строчка кода. Подскажите пожалуйста, как правильно добавить ввод вопроса, чтобы не возникало никаких аномалий и ошибок.


Сам код приведён ниже и результат я прикрепил в виде фото:


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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <stdio.h> //подключение библиотеки ввода-вывода С
#include <locale.h> //подключение библиотеки управления локалями
#include <stdlib.h> //заголовочный файл библиотеки стандартных функции
#include <string.h> //заголовочный файл библиотеки функции для работы со строками
#include <time.h> //заголовочный файл библиотеки функций работы с временем
int main(void)
{
    setlocale(LC_ALL, "rus");//использовать русские символы
    srand(time(NULL));
    int x, answ;
    char str[80];
    
    char *answers[20] = {
        "Можешь положиться",
        "Бесспорно",
        "Перспективы не очень хорошие",
        "Пока не ясно, попробуй снова",
        "Определенно да",
        "Да",
        "Решено – да",
        "Даже не думай",
        "Никаких сомнений",
        "Хорошие перспективы",
        "Вероятнее всего",
        "Сконцентрируйся и спроси опять",
        "Сейчас нельзя предсказывать",
        "Знаки говорят – да",
        "Спроси позже",
        "Мне кажется – да",
        "По моим данным – нет",
        "Мой ответ – нет",
        "Лучше не рассказывать",
        "Весьма сомнительно" };
    do {
        system("cls"); //очистка экрана
        printf("МАГИЧЕСКИЙ ШАР\n\n");
        printf("Выберите действие \n\n");
        printf("1 Задать вопрос\n");
        printf("2 Выход\n");
        printf("Ваш выбор - > ");
        scanf("%d", &x);
        switch (x) 
        {
        case 1:
            printf("\nВведите ваш вопрос и нажмите <Enter> : ");
//_____________________________________________________________
 
            gets_s(str); //ВОТ ЭТО МЕСТО ОН ТУПО ИГНОРИТ
//_____________________________________________________________
 
            printf("\n\n");
            answ = rand() % 20;
            printf(answers[answ]);
            printf("\n");
            break;
        case 2: 
            printf("Программа завершена \n"); break; 
        default: printf("Ошибка ввода\n"); break;
        }
 
        system("pause"); //приостановка выполнения программы
    } while (x != 2);
}
Миниатюры
Ввод строки в цикле do while  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2020, 23:50
Ответы с готовыми решениями:

Ввод строки в цикле
Собственно проблема:при запросе о продолжении цикла ввожу один,и чтобы программа работала корректно...

Ввод пустой строки в цикле
Проблема вот в чем. Я с клавиатуры ввожу слова, при чем каждое новое слово начинается с новой...

Ввод и вывод в цикле
Как сделать форматированный вывод сообщения в цикле о том, что нужно ввести i-e значение ...

Ввод данных в цикле
Во многих задачах, которые я сейчас прорешиваю, требуется вводить данные в цикле. Например, при...

6
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
12.04.2020, 01:08 2
Цитата Сообщение от DanCheckZeD Посмотреть сообщение
вывод до тех пор, пока пользователь не даст команду завершения программы
Цитата Сообщение от DanCheckZeD Посмотреть сообщение
while (x != 2);
здесь нужно сделать бесконечный цикл с выходом по кейсу..
C
1
while(1);
Цитата Сообщение от DanCheckZeD Посмотреть сообщение
scanf("%d", &x);
Цитата Сообщение от DanCheckZeD Посмотреть сообщение
gets_s(str);
почему у тебя разные функции ввода, тем более в gets_s должно быть передано целых два аргумента?
хоть наша жизнь разнообразна, распыляться не стоит..
C
1
scanf("%s", str);
DanCheckZeD,
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <time.h>
 
int main()
{
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
 
    int x, answ;
    char str[80];
 
    char *answers[20]=
    {
        "Можешь положиться",
        "Бесспорно",
        "Перспективы не очень хорошие",
        "Пока не ясно, попробуй снова",
        "Определенно да",
        "Да",
        "Решено – да",
        "Даже не думай",
        "Никаких сомнений",
        "Хорошие перспективы",
        "Вероятнее всего",
        "Сконцентрируйся и спроси опять",
        "Сейчас нельзя предсказывать",
        "Знаки говорят – да",
        "Спроси позже",
        "Мне кажется – да",
        "По моим данным – нет",
        "Мой ответ – нет",
        "Лучше не рассказывать",
        "Весьма сомнительно"
    };
 
    do
    {
        system("cls");
        printf("\nМАГИЧЕСКИЙ ШАР");
        printf("\nВыберите действие:");
        printf("\n1 Задать вопрос");
        printf("\n2 Выход");
 
        printf("\nВаш выбор -> ");
        scanf("%d", &x);
 
        switch(x)
        {
            case 1:
            {
                printf("\nВведите ваш вопрос и нажмите <Enter>: ");
 
                scanf("%s", str);
 
                answ = rand() % 20;
                printf("%s", answers[answ]);
 
                break;
            }
            case 2:
            {
                printf("\nПрограмма завершена\n");
 
                system("pause");
 
                return 0;
            }
            default:
            {
                printf("\nОшибка ввода");
                break;
            }
        }
 
        printf("\n");
        system("pause");
    } while(1);
 
    system("pause");
 
    return 0;
}
0
Вездепух
Эксперт CЭксперт С++
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,071
12.04.2020, 01:11 3
Лучший ответ Сообщение было отмечено DanCheckZeD как решение

Решение

Цитата Сообщение от DanCheckZeD Посмотреть сообщение
C++
1
gets_s(str); //ВОТ ЭТО МЕСТО ОН ТУПО ИГНОРИТ
Пост за постом от разных авторов с одними и теми же ляпами (Почему цикл FOR пропускает первый ввод с клавиатуры (gets_s)?)....

Во-первых, вы что-то выдумываете. Ваш код даже не скомпилируется. В языке С функция gets_s имеет два параметра, а не один: https://ru.cppreference.com/w/c/io/gets

Во-вторых, Распространенные ошибки
1
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
12.04.2020, 01:20 4
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В языке С функция gets_s имеет два параметра, а не один
я этот факт уже упомянул ранее.. аргументы передаются, параметры принимаются..
Цитата Сообщение от proc3nt Посмотреть сообщение
в gets_s должно быть передано целых два аргумента
0
Вездепух
Эксперт CЭксперт С++
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,071
12.04.2020, 01:35 5
Цитата Сообщение от proc3nt Посмотреть сообщение
я этот факт уже упомянул ранее
Я лишь хотел посетовать на одинаковость проблем. Как вы сами понимаете, авторы данных вопросов компилируют свой код компилятором MSVC++ именно в режиме С++. Поэтому и gets_s(str) у них прокатывает. А вопросы свои они почему-то гонят в форум по С.

При этом это либо старая версия MSVC++, либо специально настроенная на разрешение вот такого

C++
1
2
char *answers[20] = {
        "Можешь положиться",
Цитата Сообщение от proc3nt Посмотреть сообщение
аргументы передаются, параметры принимаются
"Функция имеет два параметра", "вызов функции требует два аргумента".
0
0 / 0 / 0
Регистрация: 02.01.2019
Сообщений: 29
12.04.2020, 13:40  [ТС] 6
У меня работает gets_s с одним параметром в другой программе, но он не в цикле как здесь. Работаю в MS Visual Studio создаю проект на С++ вы правы. Вообще просто какой указать второй параметр в gets_s или как это решить подругому? fgets не работает тоже.
Миниатюры
Ввод строки в цикле do while  
0
0 / 0 / 0
Регистрация: 02.01.2019
Сообщений: 29
12.04.2020, 14:05  [ТС] 7
Я добавил второй параметр к gets_s, но он всё равно не работает. Посмотрел ссылки которые вы скинули, написал просто два gets_s и у меня всё работает. В какой-то степени это решило мою проблему, всем спасибо

C
1
2
3
4
5
6
7
char str[101];
    printf("\nВведите ваш вопрос и нажмите <Enter>\n\n");
            gets_s(str,100); gets_s(str, 100);
            printf("\n");
            answ = rand() % 20;
            printf(answers[answ]);
            printf("\n\n");
0
12.04.2020, 14:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2020, 14:05
Помогаю со студенческими работами здесь

Ввод массива в цикле while
У меня в представленном коде, цикл while должен запрашивать ввод массива объектов, и прерываться по...

ввод данных в цикле
Привет. Решил сделать такую задачу: 1.Описать структуру с именем STUDENT, содержащую следующие...

Ввод данных в цикле
Есть ли какой нибудь аналог inputbox из VB в шарпе, чтобы реализовать такой код: Dim mas As...

Ввод данных в цикле
вообщем есть цикл int a; do{ a=getch() ...... fun(a) ..... } только проблема в том что...

Не идет ввод и вывод в цикле
Не могу понять почему при проходе этого цикла нет никакого вывода #include &lt;stdio.h&gt; int main()...

В цикле пропускается ввод данных
В цикле пропускает ввод названия продукта и даты изготовления. Почему и как исправить? #include...


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

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