2016-10-21 3 views
-3

Я не могу понять, почему это делает именно то, что я хочу. Часть, в которой я использовал два scanf в цикле, меня смущает. Я скомпилировал его с помощью devcpp.Почему этот scanf работает в цикле while?

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int dend, dsor, q, r; 
    char c; 
    while(c!='n') 
    { 
     printf("enter dividend: "); 
     scanf("%d", &dend); 
     printf("enter divisor: "); 
     scanf("%d", &dsor); 
     q=dend/dsor; 
     r=dend%dsor; 
     printf("quotient is %d\n", q); 
     printf("remainder is %d\n", r); 
     scanf("%c", &c); 
     printf("continue? (y/n)\n"); 
     scanf("%c", &c); 
    } 
    system("PAUSE"); 
    return 0; 
} 
+2

где находится 'do ... while'? –

+1

Это не сайт «объясните мой код». В чем дело? Вы читали man-страницы функций? – Olaf

+2

Рассмотрите, что произошло с завершающей новой строкой, оставшейся во входном потоке после того, как вы закончили извлечение своего * второго * номера. Отладчик и некоторые одношаговые, возможно, значительно помогли бы здесь. – WhozCraig

ответ

2

FWIW, ваш код вызывает undefined behavior. В части

char c; 
while(c!='n') 

c является неинициализированным локальным переменным с автоматическим хранением и вы пытаетесь использовать значение c в то время как он является неопределенным.

Это говорит о том, что первый scanf("%c", &c); используется для , который доставляет новую строку, присутствующую во входном буфере из-за нажатия клавиши ввода после предыдущего ввода. You can read about it in details in another post.

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