Здравствуйте, Eugenio, Вы писали:
E>Здравствуйте, ansi, Вы писали:
A>>Я тебя не совсем понял, точнее совсем не понял
... Давай исправленный код, а там глянем.
E>В коде ничего не исправлял, т.к. вопрос не в новом коде — а полученные прежде объяснения не все объясняют
.
E>Я имею ввиду, что после первого вызова scanf("%[NnYy]",) и ввода юзером 1 (одного) символа,
E>повторный вызов scanf с теми же параметрами не работает:
E>программа проходит этот кусок и завершается, не принимая ввода от юзера.
E>Это может объясняться наличием в буфере еще не считанных символов, но их там НЕТ!
Ясно, что ничего не ясно.
Во-первых, в твоей программе вызов scanf("%[NnYy]", &inp) только один. После него идет scanf("%f", ...).
Во-вторых, чего ты собственно хочешь, если ты портишь стек? Чисто ради спортивного интереса, попробуй вместо
char inp;
Написать
char _buff[20];
char &inp = _buff[0];
должно заработать... Если не заработает, то покажи, что именно ты запускаешь.
В-третьих, я пробовал на VS 2003 и все работает и в дебаг версии, и в релизной. ВС++ 3.1 тоже съел на ура. Ну то есть, если ты херишь стек, то вообще-то хорошо, что она у тебя не работает, иначе эту ошибку можно было бы не отловить... В общем какой компилятор?
Запускаю это:
int _tmain(int argc, _TCHAR* argv[])
{
float feet, meters, centimeters;
float foperand1 = 0, foperand2 = 0;
char inp;
printf("Hello, world!\n");
printf("Do you want to transfer some feet to meters? (y/n): ");
scanf("%[nNyY]c", &inp);
switch (inp)
{
case 'y':
case 'Y':
printf("Input number of feet:\n");
scanf("%f", &feet);
while (feet)
{
centimeters = feet * 12 * 2.54;
meters = centimeters / 100;
printf("%8.2f (feet) is equal to\n", feet);
printf("meters %8.2f \n", meters);
printf("centimeters %8.2f \n", centimeters);
printf("\nInput another value in feet (0 - exit program): ");
scanf("%f", &feet);
}
return 0;
}
return 0;
}
new RSDN@Home(1.1.4, 303) << new Message(); std::head::ear << "Ice MC — Run fa cover";