我正在编写一个C程序,需要接受最多100个字符的用户输入,但允许用户输入低于该限制。我正在尝试使用while循环实现这个想法,该循环继续接受char输入,直到用户按下enter(ascii值为13),此时循环应该中断。这就是我写的:
char userText[100]; //pointer to the first char of the 100
int count = 0; //used to make sure the user doens't input more than 100 characters
while(count<100 && userText[count]!=13){ //13 is the ascii value of the return key
scanf("%c", &userText[count]);
count++;
}
从命令行启动,如果我输入几个字符然后按回车键,则提示只是转到一个新行并继续接受输入。我认为问题在于我缺乏理解scanf如何接收输入,但我不确定如何更改它。当用户按下回车键时,我该怎么做才能循环中断?
答案 0 :(得分:1)
由于您已阅读&userText[count]
然后执行count++
,因此循环条件userText[count]!=13
正在使用count
的新值。您可以使用以下方法修复它:
scanf("%c", &userText[count]);
while(count<100 && userText[count]!='\n'){
count++;
scanf("%c", &userText[count]);
}
正如Juri Robl和BLUEPIXY指出的那样,'\n'
是10. 13是'\r'
,这不是你想要的(最有可能)。
答案 1 :(得分:0)
您应该检查\n
(= 10)而不是13.还要检查错误的count
,它已经是一个到高。
int check;
do {
check = scanf("%c", &userText[count]);
count++;
} while(count<100 && userText[count-1]!='\n' && check == 1);
userText[count] = 0; // So it's a terminated string
另一方面,你可以使用scanf("%99s", userText);
,它允许最多99个字符输入(最后一个输入为0)。
检查check == 1
会查找阅读中的错误,例如EOF
。
答案 2 :(得分:0)
while(count<100 && scanf("%c", &userText[count]) == 1 && userText[count]!='\n'){
count++;
}