Проверка на корректный ввод С (именно С)
Есть переменная типа int с вводом через scanf_s в консольке. Если я ввожу допустим букву или любой символ кроме цифры, то цикл проверки должен повторяться до ввода цифры.
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Проверка на корректный ввод числа
Вводится число, если оно введено верно, нужно вывести hello world это количество раз, а если.
Проверка на корректный ввод числа
Мне нужно вывести hello world то количество раз, какое напишет пользователь, но если введено что-то.
Проверка на корректный ввод символов
Как исправить? Нужно ввести строку и проверить на корректный ввод. Отмечу, что по заданию.

Проверка TextBox на корректный ввод
Собственно проблема в том, что я не знаю как вывести ошибку о том, что не во все текст боксы.
95 / 59 / 38
Регистрация: 02.01.2019
Сообщений: 161

Сообщение было отмечено RabotnikMAKA как решение
Решение
со scanf_s не получается, вот вариант с scanf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#include #include #include int main() { char ch; printf("enter a number!\n"); scanf("%c", &ch); while (ch=getchar() && !isdigit(ch) ) { printf("not a number! enter again!\n"); scanf("%c", &ch); } printf("success"); return 0; }
Как реализовать проверку на вводимые символы?
Есть участок кода, в котором я ожидаю от пользователя подтверждения в виде ‘Y’/’y’ или ‘N’/’n’. Перепробовал кучу вариантов, от getch до scanf() совместно с fflush(stdio) в разных циклах и их комбинациях. И всегда программа частично работает, но с подвохом. В частности: в нижеприведенной реализации я хоть и добился того, что проверка реагирует на ‘Y’/’y’ или ‘N’/’n’, но делать она это может, например, и при вот таком вводе: «polniyBred». (наткнулась на y в 6 позиции). Честное слово, я прекрасно понимаю, что проблема во мне, что я не совсем соображаю уже в 2 часа ночи, что я не знаю и 10% функций стандартной библиотеки. Поэтому прошу сжалиться и показать, как канонично пишутся такого рода проверки и пользовательские диалоги, избегая по возможности костылей и изоленты. Вы же все сталкивались с такими программами, которые не позволяют вам ввести чушь.
void usrSettings(struct usrSettings_str **usrSet) < char consent; printf("Before changing the settings, read the command manual .help\n"); printf("Are you sure? (Y/y(for 'Yes') or N/n(for 'No' - setting by default)\n"); scanf("%c", &consent); while(consent != 'Y' && consent != 'y' && consent != 'N' && consent != 'n')< printf("Enter Y/y or N/n\n"); printf(">"); scanf("%c", &consent); > if (consent == ('Y' || 'y')); < //Edit somethings settings printf("User enter Yes\n"); >if (consent == ('N' || 'n')) < //Return to main menu printf("User enter NO\n"); >>
В общих чертах, я понимаю, что решение должно быть банальным, но чем дольше я копаю, тем сильнее зарываюсь. Вот, например, scanf() отработала в цикле 4 раза (видать, брала символы из буферизированного ввода), до тех пор, пока не повстречала ‘y’. (скриншот 3).
Скриншот 1 (Казалось бы. )

Скриншот 2 (Вот тут начинается)

Скриншот 3 (Полный абзац!)

- Вопрос задан более трёх лет назад
- 1408 просмотров
1 комментарий
Простой 1 комментарий
Как сделать проверку на ввод символов
Если введено символ функция printf зацикливается при том что scanf не считывает значение с клавиатуры. Для компилации кода использую терминал в Linux Ubuntu.
Как сделать чтобы при ошибке можно было нормально ввести значение и продолжить работу программы? Полный пример функции.
int menu(void) < int casenum=0, counter = 0; char answerYes[] = "y", ans[10]; do < printf("+----------------------------------+\n"); printf("|0|Вихід |\n"); printf("|1|Ввести дані |\n"); printf("|2|Видалити запис |\n"); printf("|3|Видалити всі дані про місяць |\n"); printf("|4|Відсортувати за спадінням |\n"); printf("|5|Найменші витрати на харчування |\n"); printf("|6|Найбільші витрати на квартпліту |\n"); printf("|7|Витрати більші ніж зарплата |\n"); printf("+----------------------------------+\n"); scanf("%d", &casenum); while( casenum < 0 && casenum >7 ) < printf("Помилка! Ви ввели символ. Введіть ще раз.\n"); int c; while((c = getchar()) != '\n' && c != EOF); scanf("%d", &casenum); >switch (casenum) < case 0: return 0; break; case 1: add(); counter = 1; break; case 2: deleteAllDataMonth(); counter = 2; break; case 3: sorting(); counter = 3; break; case 4: minFootCosts(); counter = 4; break; case 5: maxCostsForRent(); counter = 5; break; case 6: spendingMoreThanSalary(); counter = 6; break; default: system("cls || clear"); printf("Ви ввели неістуючу команду!\n"); break; >> while (counter == 0); printf("\n\nБажаєте повернутися в меню або вийти з програми? (y/n)\n"); scanf("%s", ans); if (strcmp(ans, answerYes)==0) < system("cls || clear"); menu(); >else return 0; return 0; >
Здесь я исправил код, но проблема осталась. По идеи при вводе символа она должна выводить ошибку, но програма просто закрываеться.
Сделать проверку на символы при вводе
Сделал прогу на задачу»Дано натуральное число, равное выраженной в копейках цене некоторого товара, например 317, 100, и т.д. Выразить цену в гривнях и копейках, например 3 гривни 17 копеек. Написать на С.
Осталось сделать проверку на ввод символов, чтоб если вводятся символы, то выбивалась ошибка и снова произвести ввод.
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
includestdio.h> #include void main(void) { clrscr(); int k,g,n,m,l; printf("Введите количество копеек n="); scanf("%d",&n); g=n/100; k=n%100; m=g%10; l=k%10; if(g>10&&g20) printf("%d гривeн ",g); else if(m==1) printf("%d гривнa ",g); else if (m>=2&&m5) printf("%d гривны ",g); else printf("%d гривен ",g); if(k>10&&k20) printf("%d копеек ",k); else if(l==1) printf("%d копейка\n",k); else if(l>=2&&l5) printf("%d копейки\n",k); else printf("%d копеек\n",k); getch(); }
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Сделать в switch проверку на цифры\буквы и другие символы
Всем привет, не понимаю как сделать в свиче проверку на цифры\буквы и другие символы. #include.
Отбросить ненужные символы при вводе
Здравствуйте! Задача. Введите строку "characters" стандартного входного устройства. Сохраните.
Скрыть символы в консоли при вводе пароля
Мне нужно ввести пароль таким образом(все через консоль): если пользователь нажимаешь какую-нибудь.

Как вводить символы с клавиатуры на консоль, чтобы при вводе они шифровались?
Как вводить символы с клавиатуры на консоль, чтобы при вводе они шифровались (вместо символа.
![]()
![]()
![]()
![]()
12243 / 7373 / 1734
Регистрация: 25.07.2009
Сообщений: 13,521
extazzy, описание функции strtol() почитайте.
Регистрация: 02.12.2009
Сообщений: 19
На примере её легче бы было понять.
This party getting crazy!
Регистрация: 22.09.2009
Сообщений: 427
мне тоже интересно, как это задать. я где-то уже видел, кто-то показывал, но я забыл наверное
Регистрация: 02.12.2009
Сообщений: 19
если интересно то вот как я реализовал проверку то вот:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
unsigned int k,g,n,m,l; char string[40]; char *ptr, *s; do { printf("Введите количество копеек n="); scanf("%s",&*s); n=atoi(s); strcpy(string, "absdefghijklmnopqrstuvwxyz"); ptr=strchr(string, n); { if (ptr) printf("Ошибка\n"); } }while(ptr); .
Регистрация: 29.11.2009
Сообщений: 224
Вот, как выполнить проверку на цифры:
Немножко подправил, щас будет работать:
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
#include #include #include using namespace std; bool CheckInt(char* str) { int symbols = 0; int digits = 0; while(*str !=0) { symbols++; if(isdigit(*str++)) digits++; } if(symbols==digits) return true; else return false; } int main() { char input[100]; for(;;) { cout "Enter number: "; cin.getline(input, 99); if( CheckInt(input)) break; else cout "Wrong input!\n"; } int number = atoi(input); }
![]()
![]()
![]()
![]()
12243 / 7373 / 1734
Регистрация: 25.07.2009
Сообщений: 13,521
extazzy, то есть 1#2_3@4 за нормальное число проходит?
Далеко не безупречный вариант, но в большинстве случаев работает:
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
#include #include #include #include /* возвращает 0, если в строке только целое число, после последней цифры не должно быть пробелов, перевода строки, или ещё чего-нибудь */ int testVal(const char *str) while ( isspace(*str) ) ++str; if ( *str == '+' int getIntVal(){ int val; char buf[32] = {0}; do { printf("Enter some integer value: "); if ( scanf("%31s", buf) != 1 ){ fprintf(stderr, "Can't get some value!\n"); exit(1); } } while ( testVal(buf) && printf("Bad value!\n") ); return atoi(buf); } int main(void){ int i; i = getIntVal(); printf("You entered %i\n", i); return 0; }