【发布时间】:2018-03-05 16:45:56
【问题描述】:
我正在尝试用 C 编写一个程序,以便它从用户那里获取只能是 'Q' 'q' 'N' 'n' '1' 或 '2' 的输入,其他一切都应该是无效的。我是 C 新手,因此我仍然无法弄清楚 fgets 应该如何工作。我作为输入输入的任何内容都以“à”的形式出现。
char C=' ';
int N=0;
int flag=1;
char buffer[20];
char input[20];
printMenu();
printf("\n\nPlease choose something: ");
fgets(buffer, sizeof(buffer), stdin);
sscanf(buffer, "$s",&input);
//checking the input, shows à instead of an actual input
printf("Input is %c\n", input);
if(*input=='C'||*input=='c')
C=userInputChar();
else
if(*input=='N'||*input=='n')
N=userInputInt();
else
if(*input=='1')
printTriangleLeft(C,N);
else
if(*input=='2')
printTriangleRight(C,N);
else
if(input[0]=='Q'||input[0]=='q'){
printf("Exiting the program...");
return 0;
}
else
printf("Invalid input");
【问题讨论】:
-
为什么嵌套的 if 语句中没有大括号...?
-
也许是
switch声明 -
sscanf(buffer, "$s",&input);-->sscanf(buffer, "%s",input);(但这只会得到第一个单词)并且不要忘记验证转换if (sscanf(buffer, "%s",input) != 1) { /* handle error */ } -
sscanf(buffer, "$s",&input);printf("Input is %c\n", input);-->sscanf(buffer, "%19s", input);printf("Input is %c\n", *input); -
我认为你不需要那些,除非你有超过 1 个声明
标签: c unix input user-input fgets