c++ - scanf() 不接受空格

标签 c++ c scanf

我需要一个 scanf() 调用来接受空格(没有制表符或换行符,只有 ' ' 空格字形)。

char buffer[2048];
scanf(" %2048[0-9a-zA-Z ]s", buffer);

这个格式说明符是我从这个问题的答案中得到的:

how-do-you-allow-spaces-to-be-entered-using-scanf

虽然它很好地接受了第一个输入序列,但它在第一个空白字符所在的位置终止,并带有一个空字符。这是怎么回事?我可能使用了错误的格式吗?

我应该说,我在这里使用 scanf() 是因为安全不是问题;我是唯一会使用这个特定程序的人,而且输入格式严格。

最佳答案

使用 scanf("%[^\n]",buffer);。它将接受空格。

示例程序-

int main()
{
    char buffer[2048];
    printf("Enter the string\n");
    scanf("%[^\n]",buffer);

    printf("%s\n", buffer);
    return 0;
}

输出-

root@sathish1:~/My Docs/Programs# ./a.out 
Enter the string
abc def ghi ijk
abc def ghi ijk
root@sathish1:~/My Docs/Programs# 

关于c++ - scanf() 不接受空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25256697/

相关文章:

c++ - move 没有 move 构造函数的类

c - 如何在C中确定i+++--j

c - 如何在 lwip 堆栈中实现 tcp-poll 功能

c++ - 无法从文件中读取简单的二进制整数? (C++)

c++ - 如何跨多个文件使用命名空间

代码无法读取多维数字和字符

c - Atoi 函数无法正确转换字母

C scanf() 不解析我的输入

c++ - 我可以在不使用阻塞 I/O 的情况下在数据报套接字上调用 select

c - 当我拔下串行电缆时,Linux read() 调用不返回错误