Фильтр ввода только для чисел в C
Как получить ввод от пользователя, только цифры?
это мой код.:
#include <windows.h> #include <stdio.h> int a; int b; int options; void premenu() { printf("\n\t\t* Operatori Unari - Increment si Decrement *\n\n"); printf("\n\tIntroduceti a = "); scanf("%d", &a); } void menu() { printf("\n\tAlege una din optiunile de mai jos:\n" "\n 1. Post Incrementare (b = a++)" "\n 2. Pre Incrementare (b = ++a)" "\n 3. Post Decrementare (b = a--)" "\n 4. Pre Decrementare (b = --a)" "\n 5. Iesire Program" "\n\n Selectati: "); scanf("%d", &options); } int main() { premenu(); menu(); int i; for(i = 0; i < options;) { if(options == 1) { b = a++; printf("\n a = %d si b = %d\n", a, b); Sleep(2500); system("cls"); premenu(); menu(); } else if(options == 2) { b = ++a; printf("\n a = %d si b = %d\n", a, b); Sleep(2500); system("cls"); premenu(); menu(); } else if(options == 3) { b = a--; printf("\n a = %d si b = %d\n", a, b); Sleep(2500); system("cls"); premenu(); menu(); } else if(options == 4) { b = --a; printf("\n a = %d si b = %d\n", a, b); Sleep(2500); system("cls"); premenu(); menu(); } else if(options == 5) { Sleep(1000); system("cls"); printf("\n\n\tTerminare Program ! Apasati orice tasta pentru a inchide.\n"); Sleep(3000); system("cls"); break; } else { printf("\n Nu exista aceasta optiune !\n"); Sleep(1000); printf("\n Selectati 1, 2, 3, 4 sau 5"); Sleep(2500); system("cls"); printf("\n\t\t* Operatori Unari - Increment si Decrement *\n\n"); printf("\n\tIntroduceti a = %d\n", a); menu(); } } return 0; }
Что я уже пробовал:
Извините за язык в коде не английский Тхо.. :\
Richard MacCutchan
В чем же проблема? Если пользователь вводит любой параметр, отличный от 1,2,3,4 или 5, вы публикуете сообщение об ошибке. Вы можете добавить некоторый код в premenu, чтобы проверить результат вызова функции scanf, и проверить, что значение находится в некотором диапазоне.
M@gelearn
Да, да .. проблема не в том, что с опцией 1, 2, 3, 4 или 5 я обращаюсь к пременю, когда пользователь впервые вводит номер. Если пользователь наберет буквенное " А " или "в", или любой другой знак, например " \ "или"]", или любой другой знак, программа сломается. Вот в чем суть моего вопроса. Ofc. если я разрешу пременю, я могу добавить тот же код, чтобы избежать типа пользователя, отличного от 1, 2, 3, 4 или 5 .
Richard MacCutchan
Вот что я имел в виду. Ваша функция premenu использует scanf для получения значения, но вы не проверяете результат. Поэтому начните с установки некоторого значения a (например, минимального значения для int: -2147483648) и проверьте результат после scanf, чтобы убедиться, что он действителен.