我正在编写一个程序,用户输入两个二进制数字和一个操作字符,然后以十进制打印输出。我希望while循环保持程序运行,直到用户输入quit。如果用户在scanf中输入quit而不是整数,该如何读取?有没有办法捕捉到这一点?
#include <stdio.h>
#include <string.h>
int toDecimal(int num);
int main(){
// Define variables
int num1, num2, result = 0;
char op;
char run[4] = "go";
// While loop to rerun program until quit is entered
while(strcmp(run, "quit\n") != 0){
// Reads user input
scanf("%i %c %i", run, &num1, &op, &num2);
printf("\nnum1: %i num2: %i op: %c\n", num1, num2, op);
num1 = toDecimal(num1);
num2 = toDecimal(num2);
printf("\nnum1: %i num2: %i op: %c\n", num1, num2, op);
}
printf("\nGoodbye!\n");
return 0;
}
我相信我可以将所有内容读取为字符串,然后转换为整数,但是我不知道如何。这是我应该研究的解决方案吗?
如果用户输入quit而不是scanf中的整数,我该如何读取?
scanf()
没有好的方法。而是使用fgets()
来获取用户输入,并且不要使用scanf()
,直到您知道它为什么不好。
// Read user input
char buf[80]; // Use adequate size input buffer,
while (fgets(buf, sizeof buf, stdin)) {
buf[strcspn(buf, "\n")] = '\0'; // Lop off potential trailing \n
if (sscanf(bufm "%i %c %i", &num1, &op, &num2) == 3) {
printf("\nnum1: %i num2: %i op: %c\n", num1, num2, op);
num1 = toDecimal(num1);
num2 = toDecimal(num2);
printf("\nnum1: %i num2: %i op: %c\n", num1, num2, op);
} else if (strcmp(buf, "quit")== 0) {
break;
} else {
printf("Bad input <%s> ignored\n", buf);
}
}
这是一个非常基本的想法,希望您能理解。在读取字符串时也可以使用动态内存分配。
基本上,您使用fgets读取整个输入,并使用sscanf提取变量。
#include <stdio.h>
#include <string.h>
int main ()
{
int n1,n2;
char arr[1000],oper;
fgets(arr,sizeof(arr),stdin);
while (strcmp(arr,"quit\n")!=0){
if (sscanf(arr,"%d %c %d",&n1,&oper,&n2)==3); /* Scanning for each number and operator and checking input*/
else
printf("wrong input");
/* Code */
fgets(arr,sizeof(arr),stdin);
}
return 0;
}