Почему Scanf реагирует так?

#include "stdafx.h"
#include "stdlib.h"

int _tmain(int argc, _TCHAR* argv[])
{
    char *dumb = (char*)malloc(50);
    scanf("%[^\n]s", dumb);
    printf("%s\n",dumb);

    scanf("%[^\n]s", dumb);
    printf("%s\n", dumb);

    return 0;
}

Мне нужна помощь с кодом, если я запускаю этот код и пишу в первом файле scanf "Hellow World", он выводит 2 "Hello Worlds" и перепрыгивает через другой scanf, и как мне это исправить?

2 ответа

Очистите входной буфер после scanf,

char *dumb = (char*)malloc(50);
scanf("%[^\n]s", dumb);
fflush(stdin);  //flush remaining input buffer
printf("%s\n",dumb); 


scanf("%[^\n]s", dumb); 
fflush(stdin);
printf("%s\n", dumb);

Прежде всего, не используйте приведение в стиле C, вместо этого используйте статическое приведение:

auto dumb = static_cast<char*>(malloc(50));

и вам нужно cin.ignore() после первого printf очистить буфер:

auto dumb = static_cast<char*>(malloc(50));
scanf("%[^\n]s", dumb);
printf("%s\n", dumb);
std::cin.ignore();
scanf("%[^\n]s", dumb);
printf("%s\n", dumb);

или вы можете использовать решение, указанное в разделе комментариев:

scanf("%49[^\n]%*c", dumb);
Другие вопросы по тегам