c - 提示用户重新输入号码
问题描述
我正在做一个练习“do while”程序,我希望用户输入三个数字,程序将在屏幕上打印总和。收到答案后,程序会询问用户是否要输入另外三个数字来获得另一个答案,以此类推。我对此很好。
如果用户输入的不是整数(“A,!,%”)等,我希望程序提示用户重新输入一个数字。请参阅程序中的注释。
#include <stdio.h>
/*
Do - While
This program shall ask the user to enter
three numbers and print out the sum. Entering letters
or special characters will ask the user to re-enter that
number.
example:
Enter Number 1: 2
Enter Number 2: 5
Enter Number 3: 9
Answer is 16
...
Enter Number 1: 2
Enter Number 2: yum here user incorrectly enters letters
Enter Number 2: 8 re-prompted to enter number to continue
Enter Number 3: 9
Answer is 19
*/
int main(void) {
int a,b,c,ans,n;
do{
do{
printf("Enter Number 1: ");
scanf("%d", &a);
printf("\n");
}
while((a>0) || (a<0)|| (a==0));
do{
printf("Enter Number 2: ");
scanf("%d", &b);
printf("\n");
}
while((b>0) || (b<0)|| (b==0));
do{
printf("Enter Number 3: ");
scanf("%d", &c);
printf("\n");
}
while ((c>0) || (c<0)|| (c==0));
ans = a+b+c;
printf("Answer is %d\n\n", ans);
printf("Press 1 to start over, or 0 to quit...");
scanf("%d",&n);
printf("\n");
}while (n!=0);
return 0;
}
解决方案
您可以使用 fgets 获取输入并使用 strtol() 将用户输入的字符串转换为 int。如果当用户输入不是以数字开头或其中包含数字时 strtol 返回 0。从那里您可以检查用户输入是否为 0,然后重新提示用户,直到 a 不为 0。
*instead of scanf()*
char num1[5];
char *end;
fgets(num1, 5, stdin);
a = strtol(num1, &end, 10);
while( a = 0){
fgets....
}
推荐阅读
- php - 将字符串添加到会话变量 echo
- python - 是否可以在代码中用空格写大数
- python - 使用 OpenCV python 从手绘逻辑门图生成布尔表达式
- r - 在多个绘图上绘制 y >1 时,Cowplot 剪辑标签
- sql - 无法更新sql表中的列
- excel - NETWORKDAYS / 工作日计算
- c++ - 将仿函数对象传递给模板类的构造函数
- python - 如何使用 python 子进程模块将 sqlplus 作为 sudo 连接到 oracle 用户?
- python-3.x - requests.exceptions.MissingSchema:无效的 URL 'None':尝试通过 Selenium 和 Python 查找断开的链接时未提供架构
- php - 是否可以使用 laravel excel 从一张 excel 表中将数据导入多个表?