为什么scanf会这样反应?

时间:2015-11-29 10:54:52

标签: c printf scanf stdio

#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,  以及如何解决它?

enter image description here

2 个答案:

答案 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)