【发布时间】:2020-01-17 16:40:55
【问题描述】:
我正在制作一个程序,用户输入两个二进制数和一个操作字符,然后我以十进制打印输出。我希望 while 循环保持程序运行,直到用户输入退出。如果用户在 scanf 中输入退出而不是整数值,我该如何读取?有没有办法捕捉到这个?
#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;
}
我相信我可以将所有内容作为字符串读取,然后转换为整数,但我不知道如何。这是我应该研究的解决方案吗?
【问题讨论】:
-
你可以使用atoi将字符串转换为整数。
-
您可以将带有
fgets的完整输入行读入缓冲区。然后您可以测试缓冲区的内容是否为“quit\n”。如果不是,您可以使用sscanf扫描缓冲区的内容。另一种方法是测试您的scanf的返回值。如果为 0,则输入不以数字开头。您可以使用scanf(" %s")读取输入字符串并将其与“quit”进行比较。 -
"quit\n"是一个 6 个字符大小的字符串。对于char run[4],你怎么能期望strcmp(run, "quit\n")为0? -
@chmike 建议
scanf(" %s", ...)就像建议gets()。 -
@chux-ReinstateMonica 并不完全相同。 Scanf 只会在空格处停止单词。获取将采取完整的路线。除了 gets 在 C11 中被弃用。
标签: c scanf user-input