#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,
以及我该如何解决?
最佳答案
首先,不要使用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);
关于c - scanf为什么会这样 react ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33981966/