Я написал программу в 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
?
высоко ценим вашу помощь и время :)
'nc' устанавливается на' 0' на каждой итерации цикла 'for'. Цикл 'while' будет прерван, когда будет найден символьный литерал' '0''. Я проверяю, что сказал @aix, и это правильно, см. Http://ideone.com/gw1ON за то, что я сделал. Он отображает символ новой строки, составляющий часть последующего ввода. – hmjd
Возможно ли c == '0'? когда c == '0', тогда цикл будет завершен. У меня есть c = -1 каждый раз. –
Вы говорите сленг? Пожалуйста, приложите несколько усилий при написании своих вопросов и отступов кода. Остальные люди не будут тратить время на чтение. – Seki