gpt4 book ai didi

c - 如何在 C 中的结构成员中扫描带有空格的字符串?

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

struct Demo{
char a[50];
char b[50];
int a;
};
  • 谁能给出这个结构 Demo 的代码,其中 a 和 b 将包含具有不同单词 [white-spaces] 的字符串。

    我试过了

    • scanf("[^\n]s",name.a);//其中名称是对象
    • fgets(name.a,50,stdin);

注意:我们也不能使用gets方法

所以,如果有任何其他方法,请提供给我。

最佳答案

将用户输入的 读取到 char a[50]; 中,并修剪掉其可能的尾随 '\n':

if (fgets(name.a, sizeof name.a, stdin)) {
name.a[strcspn(name.a, "\n")] = '\0'; // trim \n
}

需要处理消耗过多的长输入行和使用 name.a[] 的最后一个元素,例如:

// Alternative
if (scanf("%49[^\n]", name.a) == 1) {
// consume trailing input
int ch;
while ((ch = fgetc(stdin)) != '\n' && ch != EOF) {
;
}
} else { // Handle lines of only \n, end-of-file or input error
name.a[0] = '\0';
}

scanf("%49[^\n]%*c", name.a) 方法在两种情况下有问题:
1) 输入只有"\n"name.a中没有保存任何内容,'\n'保留在stdin中
2) 如果输入超过 49 个字符('\n' 除外),%*c 会消耗一个额外的字符,但其余的长输入行仍然存在在 stdin 中。
这两个问题也可以通过附加代码来解决。

关于c - 如何在 C 中的结构成员中扫描带有空格的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44395160/

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