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

Как сделать многократный ввод данных в языке С ?

15.04.2018, 12:31. Показов 4256. Ответов 6

Author24 — интернет-сервис помощи студентам
Например ввожу данные, смотрю результаты вычислений, и должна появиться возможность повторно вводить другие данные и получать другие результаты вычислений.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2018, 12:31
Ответы с готовыми решениями:

Как сделать ввод данных в строчку?
Как задать scanf(), чтобы можно было вводить данные через пробел в строчку?

Программа должна вычислять введенное треугольное число и позволяя пользователю многократный ввод
Всем привет! Программа должна вычислять введенное треугольное число и позволяя пользователю...

Как сделать ввод списка с контролем вводимых данных
int main(int argc, char *argv) { typedef struct { char train_number; char...

Как сделать многократный ввод данных в языке С ?
Например ввожу данные, смотрю результаты вычислений, и должна появиться возможность повторно...

6
296 / 227 / 102
Регистрация: 11.08.2016
Сообщений: 780
15.04.2018, 13:13 2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main(void)
{
    int a, b, tmp;
    while(1) //бесконечный цикл
    {
        printf("Enter "a" and "b": ");
        scanf("%d %d", &a, &b);     //ввод значений
        tmp = a + b;
        printf("sum = %d\n", tmp);  //вывод результатов
    }
    return 0;
}
1
0 / 0 / 1
Регистрация: 11.02.2018
Сообщений: 133
15.04.2018, 13:21  [ТС] 3
Это набросок, но нужно довести код до готовности.

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
#include <stdio.h>
#include <conio.h>
#include <locale.h> 
 
int main()
{
    setlocale(LC_ALL, "rus");
    
    while(1)
    {
        int c = a + 1;
        printf("введите любое число (условие выхода 5) ", a);
        scanf("%d", &a);
        printf("%dрезультат ", с);
        
        printf("хотите посчитать другое число?");
    printf("введите 'да' или 'нет');
        switch()
        {
        case 'да':
                ПЕРЕМЕСТИТЬСЯ В НАЧАЛО ЦИКЛА WHILE
            case 'нет':
            ВЫЙТИ ИЗ ЦИКЛА
                        printf("вы больше ничего не хотите считать");
         }
 
    }
     getch;
     return 0;
}
0
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,884
15.04.2018, 13:51 4
Цитата Сообщение от Muriam Посмотреть сообщение
printf("введите любое число (условие выхода 5) ", a);
Ошибка: в форматной строке нет фрагмента, соответствующего переменной а. Забыли написать %i?
Ошибка: переменная а не объявлена
Цитата Сообщение от Muriam Посмотреть сообщение
printf("%dрезультат ", с);
Ошибка: в форматной строке нет фрагмента, соответствующего переменной с. Забыли написать %i?
Цитата Сообщение от Muriam Посмотреть сообщение
C
1
2
3
4
printf("введите любое число (условие выхода 5) ", a);
...
printf("хотите посчитать другое число?");
    printf("введите 'да' или 'нет');
Так что является условием выхода, число 5 или строка "нет" (кстати, обычно пишут y/N и принимают все комбинации - yes, Yes, y, Y, No, no, n, N, а иногда даже да, д, Да, Д, нет, н, Нет, Н. Нажатие ентера делает выбор по умолчанию, в данном случае N.
Еще тут нет считывания строки с ответом, только пустой switch.
Цитата Сообщение от Muriam Посмотреть сообщение
case 'нет': ВЫЙТИ ИЗ ЦИКЛА
Имелось в виду break?
.
Вообще, зацикливание подобных программ - плохая идея. Лучше пусть отрабатывают один раз без лишних запросов ввода, а зациклить можно внешним скриптом. Как и использовать результат работы программы.
1
0 / 0 / 1
Регистрация: 11.02.2018
Сообщений: 133
15.04.2018, 14:11  [ТС] 5
НЕМНОГО ПОПРАВЛЕНО

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
#include <stdio.h>
#include <conio.h>
#include <locale.h> 
 
int main()
{
    setlocale(LC_ALL, "rus");
    
    while(1)
    {
        int a;
        printf("введите число", a);
        scanf("%d", &a);
        printf("%d ", a+1);
        
        printf("хотите посчитать другое число?");
        printf("введите 'да' или 'нет'");
        switch()
        {
        case 'да':
                ПЕРЕМЕСТИТЬСЯ В НАЧАЛО ЦИКЛА WHILE
            case 'нет':
            ВЫЙТИ ИЗ ЦИКЛА WHILE
        }    
    }
    printf("вы больше ничего не хотите считать");
    
    getch;
    return 0;
}
Добавлено через 1 минуту
COKPOWEHEU, немного поправленный код, см выше

Добавлено через 15 минут
COKPOWEHEU,

имеется ввиду:

хотите сделать ещё одно вычисление?

если выбор - да, то перемещаемся в начало цикла и все повторяется снова, но с другими входными данными
если выбор - нет, то выходим из цикла и больше ничего не вычисляется
0
296 / 227 / 102
Регистрация: 11.08.2016
Сообщений: 780
15.04.2018, 15:50 6
Muriam, в конструкции switch отсутствует собственно значение. Вы указали пустой свитч.
В кейсе вы указали символ 'да' обрамив его в ковычки, хотя это слово. Так работать не будет.
1
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,884
15.04.2018, 18:14 7
Лучший ответ Сообщение было отмечено Muriam как решение

Решение

Цитата Сообщение от Muriam Посмотреть сообщение
printf("введите 'да' или 'нет'");
switch()
Отсутствует переменная для ответа пользователя, как и ее проверка. Если не хотите связываться со строками (а пока, похоже, не стоит), ограничьтесь форматом Y/N, для этого достаточно char'а
Цитата Сообщение от Muriam Посмотреть сообщение
case 'да':
это массив из 5 байтов {0xD0, 0xB4, 0xD0, 0xB0, 0x00} (в кодировке UTF8, конечно).
А прямого сравнения массивов в Си нет - только базовых типов. Для массивов можно воспользоваться memcmp(), для строк - strcmp(), strncmp(). Но switch не умеет вызывать сторонние функции сравнения, поэтому для строк его использовать невозможно. Впрочем, возможно для отдельных char'ов.
Цитата Сообщение от Muriam Посмотреть сообщение
ПЕРЕМЕСТИТЬСЯ В НАЧАЛО ЦИКЛА WHILE
Текст на русском языке компилятором не читается. Он выдаст ошибку.
Цитата Сообщение от Muriam Посмотреть сообщение
#include <conio.h>
Не нужно. Это DOS-подобно специфичный файл, на других системах компилятор будет ругаться. Лучше сразу привыкайте не использовать подобную каку. Если хочется сделать ожидание ЭниКея, пишите system("pause"); это тоже DOS-специфично, но может быть проигнорировано компилятором.
Цитата Сообщение от Muriam Посмотреть сообщение
getch;
ЭТАШТОТАКОЭ? Вроде не переменная (нет типа), не функция (те без скобок не вызываются), не структура (нет ключевого слова). Больше всего похоже на переменную с неявным типом int. Но такая запись устарела давным-давно, лучше так не делать.
1
15.04.2018, 18:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2018, 18:14
Помогаю со студенческими работами здесь

Как организовать ввод данных на русском языке?
Помогите решить проблему, программа не хочет воспринимать русский язык,хотя setlocale(LC_ALL,...

Многократный ввод координат точки
Разработать программу, которая многократно выполняет ввод координат точки х,у и определяет: точка...

Многократный ввод класса через консоль
Подскажите пожалуйста! Есть класс Dot. Этот класс содержит координаты точки треугольника. Как...

Как сделать ввод данных самому ?
using System; using System.Collections.Generic; namespace ConsoleApplication174 { ...


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

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