#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));
并且在第一个 printf
之后需要 cin.ignore()
来清除缓冲区:
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/