#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, 以及如何解决它?
答案 0 :(得分:0)
首先不要使用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);
答案 1 :(得分:0)
在b
之后清空输入缓冲区。
O(logb)