>我正在制作一个程序,其中用户输入两个二进制数和一个操作字符,然后我以十进制打印输出。 我希望 while 循环保持程序运行,直到用户进入退出。 如果用户在扫描中输入 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, "quitn") != 0){
// Reads user input
scanf("%i %c %i", run, &num1, &op, &num2);
printf("nnum1: %i num2: %i op: %cn", num1, num2, op);
num1 = toDecimal(num1);
num2 = toDecimal(num2);
printf("nnum1: %i num2: %i op: %cn", num1, num2, op);
}
printf("nGoodbye!n");
return 0;
}
我相信我可能能够将所有内容作为字符串读取,然后转换为整数,但我不知道如何。 这是我应该研究的解决方案吗?
如果用户在扫描中输入 quit 而不是整数值,我该如何读取?
scanf()
没有好办法. 相反,使用fgets()
获取用户输入,并且在知道为什么不好之前不要使用scanf()
。
// Read user input
char buf[80]; // Use adequate size input buffer,
while (fgets(buf, sizeof buf, stdin)) {
buf[strcspn(buf, "n")] = ' '; // Lop off potential trailing n
if (sscanf(bufm "%i %c %i", &num1, &op, &num2) == 3) {
printf("nnum1: %i num2: %i op: %cn", num1, num2, op);
num1 = toDecimal(num1);
num2 = toDecimal(num2);
printf("nnum1: %i num2: %i op: %cn", num1, num2, op);
} else if (strcmp(buf, "quit")== 0) {
break;
} else {
printf("Bad input <%s> ignoredn", 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,"quitn")!=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;
}