gpt4 book ai didi

c - 处理 scanf 和 printf 中的空格

转载 作者:太空宇宙 更新时间:2023-11-04 07:08:51 26 4
gpt4 key购买 nike

我正在尝试开发一个 C 程序,它可以接受 scanfprintf 中的空格,例如名字和姓氏,作为自学习我正在阅读的文本。

我很清楚缓冲区溢出的可能性以及这些基本/旧函数的安全问题,但这完全是为了学习目的,所以我确实需要坚持使用它们。

我的程序是这样的:

#include <stdio.h>
#include <conio.h>

int main(void)
{
char name[30];

printf("Type your name\n");

scanf("%10[0-9a-zA-Z]", name);

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

编译后可以读取带有空格的字符串,但我只能打印第一段文本:

C:\Users\hackr>g++ -o whitespace.exe whitespace.c

C:\Users\hackr>whitespace.exe
Type your name
John Doe
John

C:\Users\hackr>

最佳答案

scanf("%29[0-9a-zA-Z ]", name);
^

您忘记为正则表达式中接受的字符添加空格。另外,如果您的缓冲区是 30 个字节,则您应该接受 29 个字符,而不是 10 个。为 NUL 字符留出空间。

另一件需要注意的事情是,下次您从 stdin 读取时,它将读取该行中不在 scanf 的前 29 个字符内的字符> 在开始读取下一个提示的输入之前。为了解决这个问题,在 scanf 之后添加:

while (getchar() != '\n')
; // read input to end of line

这将始终有效,因为 '\n' 不在您接受的正则表达式字符中,因此它将留在 stdin 缓冲区中。

关于c - 处理 scanf 和 printf 中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30034555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com