c - 为什么 scanf 会有这样的 react ?

标签 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

最佳答案

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

相关文章:

c - C 中的 WinSock 程序,只能在本地计算机上运行

c - 将函数调用作为参数传递给 printf 和 Reentrancy

c - 在 printf-in 非 0 终止字符串中使用精度的可移植性

c - scanf 行出现错误消息?

c - 处理意外输入

c - 如何在C语言中的for循环中使用scanf作为条件

c - 为什么这一行打印 17 而不是 3?

c - 数组和指针的算术

c - 如何知道linux内核在哪里解析tuntap接口(interface)上的MLD连接?

PHP:如何通过 sprintf() 添加前导零/零填充以 float ?