Почему 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);