gpt4 book ai didi

c - 如何允许使用 scanf 输入空格?

转载 作者:行者123 更新时间:2023-11-30 16:30:51 25 4
gpt4 key购买 nike

使用以下代码:

char *name = malloc(sizeof(char) + 256); 

printf("What is your name? ");
scanf("%s", name);

printf("Hello %s. Nice to meet you.\n", name);

用户可以输入自己的姓名,但是当他们输入带有空格的姓名时,如 Lucas Aardvark , scanf()只是切断 Lucas 之后的所有内容。我该如何制作scanf()允许空格

最佳答案

人们(尤其是初学者)永远不应该使用 scanf("%s")gets() 或任何其他函数没有缓冲区溢出保护,除非您确定输入将始终具有特定格式(甚至可能不是)。

请记住,scanf 代表“扫描格式化”,并且格式比用户输入的数据少一些。如果您可以完全控制输入数据格式但通常不适合用户输入,那么这是理想的选择。

使用fgets()(具有缓冲区溢出保护)将输入转换为字符串,并使用sscanf()对其进行评估。由于您只想要用户输入的内容而不进行解析,因此在这种情况下您实际上并不需要 sscanf() :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* Maximum name size + 1. */

#define MAX_NAME_SZ 256

int main(int argC, char *argV[]) {
/* Allocate memory and check if okay. */

char *name = malloc(MAX_NAME_SZ);
if (name == NULL) {
printf("No memory\n");
return 1;
}

/* Ask user for name. */

printf("What is your name? ");

/* Get the name, with size limit. */

fgets(name, MAX_NAME_SZ, stdin);

/* Remove trailing newline, if there. */

if ((strlen(name) > 0) && (name[strlen (name) - 1] == '\n'))
name[strlen (name) - 1] = '\0';

/* Say hello. */

printf("Hello %s. Nice to meet you.\n", name);

/* Free memory and exit. */

free (name);
return 0;
}

关于c - 如何允许使用 scanf 输入空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50896629/

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