Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
chpokhead
0 / 0 / 0
Регистрация: 22.09.2018
Сообщений: 37
1

Проверка на количество введенных чисел

11.10.2018, 19:16. Просмотров 918. Ответов 3
Метки нет (Все метки)

Доброго времени суток, помогите, пожалуйста, как в си можно реализовать проверку на количество введенных чисел, например: вводить нужно ровно три числа, при вводе меньше или больше трех программа должна останавливать свою работу.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2018, 19:16
Ответы с готовыми решениями:

Определить количество введенных нечетных чисел
С клавиатуры вводятся целые числа. Признак конца ввода – 0. Определить количество введенных...

Среди n-введенных чисел определить количество отрицательных
Прошу помочь написать программу без подключения библиотек для определения среди n-введенных чисел...

Вычислить количество положительных чисел среди 10 введенных с клавиатуры
помогите плиззз, я делаю, у меня не получается :((, нужно составить программу в turbo C, которая...

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

Написать программу которая определяет нуль и считает его количество из ряда введенных чисел
Здравствуйте! написать программу которая определяет нуль и считает его количество из ряда...

3
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10537 / 6239 / 1567
Регистрация: 25.07.2009
Сообщений: 11,876
11.10.2018, 20:14 2
C
1
2
3
4
5
int a, b, c;
 
if ( scanf("%d%d%d", &a, &b, &c) != 3 ) {
    // не ввели 3 числа
}
0
stake-k26
680 / 469 / 357
Регистрация: 25.04.2016
Сообщений: 1,351
11.10.2018, 20:43 3
Лучший ответ Сообщение было отмечено chpokhead как решение

Решение

В терминале по умолчанию используется буфферизация ввода, т.е. все, что вы вводите с клавиатуры, сначала попадает в буфер и только затем этот буфер передается в программу и анализируется. И из-за этого функции ввода ждут поступления сигнала EOF, т.е. такие функции как scanf() или getchar() будут ждать поступления символа вечно, пока вы не введете что-нибудь с клавиатуры. Поэтому сделать так, чтобы программа прерывалась, если введено меньше чисел, практически невозможно.

Сделать так, чтобы программа завершалась, если введено больше значений, чем нужно, тоже нельзя, потому что функции ввода будут просто игнорировать все лишние символы.

А значит, вам нужно использовать неканоничный режим терминала без буфферизации ввода. Для этого придется воспользоваться сторонними библиотеками, вроде ncurses. Но даже тогда не получится сделать так, чтобы программа завершалась, если введено неправильное количество символов.

Единственный способ реализовать эту идею - использовать не стандартный ввод значений с клавиатуры, а передавать их аргументами функции main(), например. Тогда вы спокойно можете контролировать количество поступивших значений:
Добавлено через 5 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main (int argc, char*argv[])
{
    if (argc != 4)
    {
        printf("передано %d аргументов вместо трех\n", argc-1);
        return -1;
    }
    else
    {
        ;/* записываем полученные аргументы в переменные */
    }
    return 0;
}
пример работы:
prog.exe 1 2
передано 2 аргументов вместо трех

Добавлено через 59 секунд
easybudda, я тоже думал об этом способе, но он будет ждать ввода третьего числа, елси введено только 2, и будет возвращать 3, даже если введено 4, 5 или 10 чисел, лишние просто отбрасываются.
1
drfaust
350 / 235 / 81
Регистрация: 02.10.2008
Сообщений: 893
Записей в блоге: 1
Завершенные тесты: 1
11.10.2018, 23:03 4
Считываем в "динамическую строку"(ту, которая realloc`ом расширяется). Чтение строки неизвестной длины
А уже потом можно делать с этой строкой всё что угодно (посчитать кол-во чисел, определить, есть ли левые символы)

Но если нет ограничений по стандартам Си - лучше использовать getline().
Их точно нет в С89 и С99, вроде как с 7 или 10 года появились в стандартах - не помню.
0
11.10.2018, 23:03
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2018, 23:03

Проверка корректности введенных данных
Здравствуйте, возникла такая проблема - в программе, на языке Си, необходимо реализовать проверку...

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

Составьте программу, которая определяет количество отрицательных, количество положительных и количество нулей среди введенных чисел
С клавиатуры вводятся N чисел. Составьте программу, которая определяет количество отрицательных,...


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

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

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