2012-05-24 4 views
1

Я написал программу в C для подсчета символов, вводимых из stdin. Я хотел использовать цикл, чтобы разрешить несколько записей. (Примечание: я новичок в программировании.)Почему персонаж ошибается после первой записи?

main() 
{ 
    long nc; 
    int c; 
    int kc=1; 
    for (kc=1;kc<=5;kc=kc+1) 
    { 
     nc=0; 
     c= getchar(); 
     while(c != '0') 
     { 

     ++nc; 
     c=getchar(); 
     } 

     printf("%1d\n",nc); 

    } 
    return 0; 
} 

Так что, как вы бы догадались, петля принимает 5 записей.

ПРОБЛЕМА: Когда я ввожу Sky0, первый результат все в порядке, 3. Но с этого момента один добавляется в счет. Это входит dame0 результатов в подсчете 5, sit0 результатов в кол-4 и т.д.

При попытке отладить эту проблему с помощью prinf на различных этапах, я понял, что после первого результата код находит конец input, 0, но входит в цикл for NEVERTHESSESS и ждет следующей записи с nc как 1. Это приводит к ошибке в соответствующих выходах.

Пожалуйста, сообщите, где я ошибаюсь? И почему он входит в цикл даже после обнаружения 0?

высоко ценим вашу помощь и время :)

+0

'nc' устанавливается на' 0' на каждой итерации цикла 'for'. Цикл 'while' будет прерван, когда будет найден символьный литерал' '0''. Я проверяю, что сказал @aix, и это правильно, см. Http://ideone.com/gw1ON за то, что я сделал. Он отображает символ новой строки, составляющий часть последующего ввода. – hmjd

+0

Возможно ли c == '0'? когда c == '0', тогда цикл будет завершен. У меня есть c = -1 каждый раз. –

+0

Вы говорите сленг? Пожалуйста, приложите несколько усилий при написании своих вопросов и отступов кода. Остальные люди не будут тратить время на чтение. – Seki

ответ

2

Проблема заключается в том, что при нажатии клавиши ввода, то становится персонажем тоже (значение 0x1a), и она возвращается в getchar вызова вне цикла.

Вы могли бы сделать что-то вроде:

while (getchar() != '\n') nc++; 

Таким образом, вы даже не нужно использовать 0, чтобы отметить конец строки.

+0

да я исправил его помощник:) ... thnks :) – Aki

+0

Ohk ... new here:) ... будет делать ... – Aki

Смежные вопросы