C:使用scanf接受预定义的输入长度char []

时间:2014-02-15 23:35:20

标签: c scanf

我正在编写一个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如何接收输入,但我不确定如何更改它。当用户按下回车键时,我该怎么做才能循环中断?

3 个答案:

答案 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++;
}