[英]How to print an error message when a user enters two options using getopt in c programming instead of one?
[英]How do I print out an error message when the user enters a floating number or characters in C language?
我是编程新手。我想创建一个游戏,让用户猜测 0 到 10 之间的数字。但是,当用户输入诸如 7.5 或字符或数字之类的浮点数时,我想打印一条错误消息超出范围,例如 11 或 -5。我该怎么做?
int main()
{
int answer,randomNumber;
int correct = 0;
int tries = 0;
char again ;
srand(time(NULL));
do{
randomNumber = rand() % 10;
printf("Guess a number between 0 and 10:\n");
while(correct ==0){
while(scanf(" %d",&answer)!=1){
printf("Wrong input.\n");
scanf(" %d",&answer);
}
if(answer<0 || answer>10){
printf("Invalid input.Enter a number between 0 and 10.\n");
continue;
}
if(answer==randomNumber){
printf("Congratulations..%d is the correct number.\n",answer);
tries ++;
correct = 1;
}else if(answer > randomNumber){
printf("Choose a lower number.\n");
tries++;
}else if (answer<randomNumber){
printf("Choose a bigger number.\n");
tries ++;
}else{
printf("Wrong input.Try again..\n");
}
}printf("Do you want to play again ? (Y/N):\n");
scanf(" %c",&again);
again = toupper(again);
while(again!='N' && again!='Y'){
printf("Invalid input.Please type Y or N.\n");
scanf(" %c",&again);
again = toupper(again);
}
}while(again != 'N');
return 0;
}
考虑使用fgets
来捕获input
。
strtol
可用于解析input
。 如果last
不指向input
末尾的换行符,则存在未处理的字符。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
int main ( void) {
char input[100] = "";
int answer,randomNumber;
int good = 0;
int correct = 0;
int tries = 0;
char again ;
srand ( time ( NULL));
do{
randomNumber = rand() % 10;
printf ( "Guess a number between 0 and 10:\n");
while ( correct == 0) {
do {
good = 1;
char *last = NULL;
if ( fgets ( input, sizeof input, stdin)) {
answer = strtol ( input, &last, 10);
if ( '\n' != *last || last == input) {
printf ( "Wrong input.\n");
good = 0;
}
else {
if ( answer < 0 || answer > 10){
printf ( "Invalid input.Enter a number between 0 and 10.\n");
good = 0;
}
}
}
else {
fprintf ( stderr, "fgets EOF\n");
exit ( EXIT_FAILURE);
}
} while( ! good);
if (answer == randomNumber) {
printf ( "Congratulations..%d is the correct number.\n",answer);
tries ++;
correct = 1;
} else if ( answer > randomNumber) {
printf ( "Choose a lower number.\n");
tries++;
} else if ( answer < randomNumber) {
printf ( "Choose a bigger number.\n");
tries ++;
} else{
printf ( "Wrong input.Try again..\n");
}
}
correct = 0;
printf ( "Do you want to play again ? (Y/N):\n");
do {
if ( fgets ( input, sizeof input, stdin)) {
}
again = toupper ( (unsigned char)input[0]);
if ( again != 'N' && again != 'Y') {
printf ( "Invalid input.Please type Y or N.\n");
}
} while ( again != 'N' && again != 'Y');
} while ( again != 'N');
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.