2014-02-15 5 views
0

Я пишу программу на C, которая должна принимать пользовательский ввод длиной до 100 символов, но пользователю разрешено вводить меньше этого предела. Я пытаюсь реализовать эту идею с циклом while, который продолжает принимать ввод char до тех пор, пока пользователь не нажимает enter (значение ascii 13), после чего цикл должен прерываться. Это то, что я написал:C: Использование scanf для принятия предопределенной входной длины char []

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 получает вход, но я не уверен, как его изменить. Что я могу сделать, чтобы сделать перерыв цикла, когда пользователь нажал кнопку ввода?

ответ

1

Потому что вы читаете в &userText[count], а затем сделать count++, поэтому условие цикла userText[count]!=13 использует новое значение count. Вы можете это исправить с:

scanf("%c", &userText[count]); 
while(count<100 && userText[count]!='\n'){ 
    count++; 
    scanf("%c", &userText[count]); 
} 

И как Juri Робл и BLUEPIXY указывают на то, '\n' 10. 13 является '\r', который не то, что вы хотите (скорее всего).

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.

0
while(count<100 && scanf("%c", &userText[count]) == 1 && userText[count]!='\n'){ 
    count++; 
} 
Смежные вопросы