2016-06-01 2 views
1

Я был в замешательстве относительно моего предположения относительно того, как цикл while может работать. Я пробовал это на своем компьютере и видел, что все случаи были такими, как ожидалось, am i right, или я что-то упустил?scanf Ошибка ввода входного сигнала

while(scanf("%d%d%d",&a,&b,&c) ,a||b||c) { /* some code */ } 

Это означает, что даже если одно значение (либо а, б или в) не равен нулю, то будет петля на


while(scanf("%d%d%d",&a,&b,&c) ,a&&b&&c) { /* some code */ } 

Это означает, что всякий раз, когда любой из , b или c становится нулевым, цикл заканчивается

ответ

1

Это правильно, первый цикл будет продолжаться до тех пор, пока все значения ree обращаются в нуль, а второй цикл останавливается, как только один из трех элементов становится равным нулю.

Это потому, что comma operator отбрасывает результат первого выражения - по существу, выражение a || b || c или a && b && c станет вашим условием цикла.

Обратите внимание, что ваши петли не могут быть завершены, когда вход заканчивается перед чтением комбинации остановки (все нули/один ноль). Когда это произойдет, ваш цикл станет бесконечным. Чтобы не допустить этого, измените петли на

while(scanf("%d%d%d",&a,&b,&c) == 3 && (a||b||c)) { //some code } 

или

while(scanf("%d%d%d",&a,&b,&c) == 3 && a && b && c)) { //some code } 
+0

Ссылка на wiki действительно помогла, и ваше объяснение было на месте! спасибо :) –

0
while(true) {//some code} // loop will run 
while(false) {//some code} // loop will not run 

поскольку любое другое значение, чем 0 считается истинным, чтобы ваш первый while цикл будет выполняться, пока все они не станут 0. и во втором while петле, если какой-либо из них станет 0, цикл не будет выполняться. только основные операторы.

+0

Это не отвечает на вопрос, так как 'while (true)' никогда не станет «ложным» и наоборот. 'True' и' false' являются константами, а 'a',' b' и 'c' являются переменными. – user3078414

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