Я пытался сделать небольшую программу-калькулятор, чтобы проверить свои навыки, потому что я довольно зеленый, когда говорю о кодировании. В любом случае, я пытаюсь создать функцию с циклом, который будет запрашивать число до тех пор, пока число не будет введено, и отклонит буквы.
Это то, что произвело мое ограниченное понимание/поиск в Google:
int is_number(int num){
do {
printf("\n:");
scanf("%d",&num);
if( isalpha(num)){
printf("\nYou entered a letter, please input a number\n");
continue;
} else {
printf("Number accepted...\n");
break;
}
} while(isalpha(num));
return num;
}
Единственная проблема в том, что он вылетает, если дать письмо, но прогресс есть... нет инфинитивного спама одного и того же сообщения.
Следующий код — это весь код, а не просто фрагмент:
#include<stdio.h>
#include<windows.h>
#include<ctype.h>
//Records the answer for Y/N question and checks if answer is Y or No
char check_yesno_question(char a){
do{
printf("\n:");
scanf(" %c",&a);
if((a=='Y')||(a=='N')||(a=='y')||(a=='n')){
break;
}
else{
printf("\nIncorrect answer, please input Y or N (Y = Yes, N = No)\n");
continue;
}
}while((a!='Y')&&(a!='N')&&(a!='y')&&(a!='n'));
return a;
}
//My sad attempt to test if number given is a letter
int is_number(int num){
do{
printf("\n:");
scanf("%d",&num);
if( isalpha(num)){
printf("\nYou entered a letter, please input a number\n");
continue;
}
else{
printf("Number accepted...\n");
break;
}
}while(isalpha(num));
return num;
}
int main(){
char YesNo1;
int start;
int StartWait=500;
//char Choice;
int number1;
int number2;
int number3;
int number4;
printf("Welcome to simple calculator 0.01\n");
printf("At this stage calculator supports only 4 numbers\n");
printf("Would you like to start simple calculator?\n");
printf("Y/N?\n");
//Calls for check_yesno_question
YesNo1=check_yesno_question(YesNo1);
//Checks if answer is yes proceed, if answer is no, return 0;
if((YesNo1=='y')||(YesNo1=='Y')){
printf("Awnser = Yes\n");
printf("Starting up the calculator");
for(start=0;start<3;start++){
printf(".");
Sleep(StartWait);
}
printf("\n");
}
else{
printf("Awnser = No\n");
printf("Turning of the calculator");
for(start=0;start<3;start++){
printf(".");
Sleep(StartWait);
}
printf("\n");
return 0;
}
//Me wanting to make things look bit more clean
system("cls");
printf("---------------CALCULATOR---------------\n");
//Calls for is_number
number1=is_number(number1);
return 0;
}
Как видите, он незакончен. Я в основном закончил искать ответы сам. Когда это было опубликовано, мое время было 4:04 утра.
scanf
(и семейство). Например, что он возвращает. - person Some programmer dude   schedule 31.07.2018num
никогда не будет буквенным символом (если только введенное число не совпадает с кодировкой единицы (например, вы вводите97
, что совпадает с ASCII закодированный символ'a'
), или вы передали символ в функцию, что напоминает мне: Почему вы передаетеnum
в качестве аргумента?Это может быть просто локальная переменная). - person Some programmer dude   schedule 31.07.2018scanf("%d",&num);
это НИКОГДА не будет вводить ничего, кроме ведущего-
или+
и некоторого количества цифр. Таким образом, вы должны: проверить возвращаемое значение (не значение параметра), чтобы убедиться, что операция прошла успешно. И если она не удалась, то вызватьgetchar()
, чтобы использовать оскорбительную букву, и повторять до тех пор, пока она не будет успешной. - person user3629249   schedule 01.08.2018