Программирование на С. двойной запрос ввода - C (СИ)
Формулировка задачи:
Здравствуйте!
Когда нужно ввести значение N, если ввести какую-то букву, то программа виснет. Нужно поставить ограничение на ввод исключительно чисел (что бы буквы вводить было нельзя)
Нашла в сети такой нехитрый способ и у себя на сроке 27 применил его.
проблема решилась- если ввести букву, то выползает предупреждение как и полагается, НО если вводишь число, то что бы программа сработала его нужно ввести два раза.
Раньше, (до этого способа запрета на буквы) Нужно что бы после ввода числа, нажал интер, и программа сразу отработала, а теперь приходится ввести число, нажать интер, после чего тебя перебрасывает на новую строку, потом еще раз ввести число, нажать интер и только после этого она отработает.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
int main()
{
int i = 0;
int j = 0;
int N = 0;
unsigned int mass[21];
printf("Vvedite znachenie massiva ot 8 do 20: ");
scanf_s("%d",&i);
printf("\n");
if ((i < 8) || (i>20)){
printf("Error! razmernost zadana neverno!\n");
printf("Press any key to exit");
_getch();
exit(0);
}
printf("Vvedite chislo N: ");
scanf_s("%d", &N);
printf("\n");
if (scanf_s("%d", &N) != 1){
printf("Error! razmernost zadana nevernooo!\n");
printf("Press any key to exit");
_getch();
exit(0);
}
else{
for (j = 0; j <= i; j++){
mass[j] = rand() % N;
}
}
for (j = 0; j <= i; j++){
printf("mass[ %d", j);
printf("]= %d", mass[j]);
printf("\n");
}
printf("Press any key to exit");
_getch();
}Решение задачи: «Программирование на С. двойной запрос ввода»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
int main()
{
int i = 0;
int j = 0;
int N = 0;
unsigned int mass[21];
printf("Vvedite znachenie massiva ot 8 do 20: ");
if (scanf_s("%d",&i) != 1) {
printf("Error! razmernost zadana nevernooo!\n");
printf("Press any key to exit");
_getch();
exit(1);
}
printf("\n");
if ((i < 8) || (i>20)){
printf("Error! razmernost zadana neverno!\n");
printf("Press any key to exit");
_getch();
exit(1);
}
printf("Vvedite chislo N: ");
//scanf_s("%d", &N); //- лишняя строка
//printf("\n"); - это тоже необязательно после Enter и так перевод строки будет
if (scanf_s("%d", &N) != 1) { // Вы же тут вводите N
printf("Error! razmernost zadana nevernooo!\n");
printf("Press any key to exit");
_getch();
exit(1);
}
// else{ //не нужен, т.к. в случае ошибки вы закрываете программу
for (j = 0; j <= i; j++){
mass[j] = rand() % N;
}
// }
for (j = 0; j <= i; j++){
printf("mass[ %d", j);
printf("]= %d", mass[j]);
printf("\n");
}
printf("Press any key to exit");
_getch();
}
Объяснение кода листинга программы
- Объявлены переменные:
- i (счетчик для цикла)
- j (счетчик для цикла)
- N (количество случайных чисел, которые необходимо сгенерировать)
- mass (массив для хранения сгенерированных случайных чисел)
- Пользователю предлагается ввести значение N.
- Если пользователь ввел значение N некорректно (не число или число, которое выходит за пределы допустимого диапазона), программа выведет сообщение об ошибке и запросит повторный ввод.
- Если пользователь ввел корректное значение N, программа переходит к следующему этапу.
- Программа генерирует случайные числа от 0 до N-1 и сохраняет их в массиве mass.
- Если количество сгенерированных случайных чисел (i) превышает 8 или меньше 20, программа выведет сообщение об ошибке и запросит повторный ввод.
- Пользователю предлагается ввести число i.
- Если пользователь ввел значение i некорректно (не число или число, которое выходит за пределы допустимого диапазона), программа выведет сообщение об ошибке и запросит повторный ввод.
- Если пользователь ввел корректное значение i, программа переходит к следующему этапу.
- Программа выводит сгенерированные случайные числа на экран.
- Пользователю предлагается нажать любую клавишу для выхода из программы.
- Программа завершается.