#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 - scanf为什么会这样 react ?-LMLPHP

最佳答案

首先,不要使用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/

10-17 01:36