我在C中有一个程序,通过接受输入选择然后产生输出来模拟用户和程序之间的ATM交互。
用户必须输入值1111才能继续进行交易,如果不是这样,程序会输出错误并一直要求用户输入正确的引脚,直到程序读入1111。 / p>
我尝试使用while循环来继续请求正确的值1111,并且在输入之前,程序一直要求用户输入正确的引脚。
void main() {
int pin;
printf("Please enter the default pin: ");
while ( pin != 1111 )
{
printf("Invalid input ");
printf("Please enter the default pin again: ");
scanf("%d", &pin);
if (pin == 1111)
{
//The program continues
}
}
}
每次输入错误的引脚时,它会再次询问引脚,然后因程序停止工作而发生错误而崩溃。我想我正在造成一个无限循环,但我不确定发生了什么。
答案 0 :(得分:3)
scanf
返回结果(成功读取的项目数)。你应该使用那个结果。阅读scanf(3)以及您正在使用的所有功能的文档。另外,在每个\n
格式控制字符串的末尾添加printf
(或调用fflush(3) ...)
编译所有警告和调试信息(gcc -Wall -g
)。然后使用调试器(gdb
)
答案 1 :(得分:2)
你可能想要这个:
void main()
{
int pin ;
printf("Please enter the default pin: ");
scanf("%d", &pin);
while ( pin != 1111 )
{
printf("Invalid input\n");
printf("Please enter the default pin again: ");
scanf("%d", &pin);
}
printf("program continues..."); //The program continues
}
示例执行
Please enter the default pin: 1234
Invalid input
Please enter the default pin again: 2222
Invalid input
Please enter the default pin again: 1111
program continues...
答案 2 :(得分:1)
检查scanf是否成功读取整数。如果失败则会读取一个字符并再试一次 如果scanf读取整数,则检查它是否是正确的引脚。如果没有,它会再次重新提示并扫描。
#include<stdio.h>
#include<stdlib.h>
int main() {
int pin = 0;
int ch = 0;
printf ( "Enter the default pin\n");
while ( pin != 1111) {
if ( scanf ( "%d", &pin) == 1) { // scanf read an int
if ( pin == 1111) {
break; // the correct pin
}
else {
printf ( "Enter the default pin\n"); //reprompt
}
}
else {
while ( ( ch = getchar()) != '\n') { //scanf failed to read int. clear input and retry
if ( ch == EOF) {
fprintf ( stderr, "problem getting input\n");
return 1;//if EOF exit
}
}
}
}
return 0;
}