Re[8]: Использование printf() и scanf()
От: ansi  
Дата: 14.06.05 08:56
Оценка:
Здравствуйте, 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";
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.