@daniil14056

C++ почему функция scanf выполняется до функции printf?

Почему( работаю в netbeans) в этом коде при выполнении нужно ввести 1 строчку, которую считают, потом еще какаю-то строчку которая не где не участвует, и уже потом уже выводиться "Введите ваше имя.\n Ваша имя -****" А нужно что бы я имя вводил сразу после вопроса. Получается что scanf срабатывает быстрее, это вообще как.
int main(int argc, char** argv) {
    setlocale(LC_ALL, "ru_RU.UTF-8"); 
    char *name; //=new char[10];
    printf("Введите ваше имя  ");
    scanf("%s",&name);
    printf("\nВаше имя - %s\n",&name);
    
    //system("pause");
    return 0;
}


А этот пример из инета вообще дичь, нужно ввести 100ни строк с рандомным числом символов пока процесс не закончиться с значением 1миллион куча цифр
int main(int argc, char** argv) {
    setlocale(LC_ALL, "ru_RU.UTF-8"); 
    char buffer[100];       // массив (буфер) для вводимой строки
    gets(buffer);            // вводим строку и нажимаем enter
    printf("%s",buffer);
    
    //system("pause");
    return 0;
}
  • Вопрос задан
  • 637 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Получается что scanf срабатывает быстрее, это вообще как.

stdout по умолчанию буферизируется построчно, т.е. вывод происходит только когда переполняется внутренний буфер или встречается символ '\n'. Чтобы принудительно вывести всё что накопилось в буфере можно использовать fflush(stdout) после printf:
printf("Введите ваше имя  ");
fflush(stdout);
scanf("%s",name);


char *name; //=new char[10];
...
scanf("%s",&name);

Этот код не работает. sscanf сканирует в массив. Должно быть
char name[10];
...
scanf("%s",name);

или
char *name = new char[10];
...
scanf("%s",name);

но никак не то, что там сейчас написано.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы