【发布时间】:2018-12-16 10:46:31
【问题描述】:
对于 C 中的练习,我需要将三个名称放在三个不同的 char 数组中,但三个名称的输入在一行上。
#include <stdio.h>
int main(){
char a[3], b[3], c[3];
scanf("%s%s%s", a, b, c);
printf(" \n %s ", a);
printf("%s ", b);
printf("%s", c);
return 0;
}
输入将在一行中,如下所示:
“aaabbbccc”
(不带“ ”)。
我试过了,但它需要按三下回车。
有没有办法用单行输入扫描多个数组?
我只能使用 stdio.h 和 scanf。
编辑:
这是完整的练习翻译(原文是意大利语)。
复制代码顶部的声明。
struct person {
char name[10];
struct person * mother;
struct person * father;
} ;
typedef struct person Person;
编写一段代码,声明三个 Person 类型变量并从输入中读取:
儿子的名字(由10个字符组成,如果需要添加特殊字符$)。
母亲的名字(与儿子的名字相同)。
父亲的名字(与儿子的名字相同)。
(如果父亲和母亲未知,则使用 NULL 常量)。
这将代表一个 3 人的家庭。 然后编写一个打印 Person 的母亲和父亲姓名的 void 函数。如果这些名称未知,则打印“Unknown”(检查指针是否不同于 NULL)。
对全家人调用此函数。
这是输入示例:
罗伯塔$$$安娜$$$$$$Massimo$$$
忽略练习的最后一部分,我的问题是输入由30个字符组成,名称数组长度为10。我显然无法编辑名称数组的长度。
编辑: 我在三个长度数组上尝试了“%3s”解决方案,或者似乎工作正常,但是,如果数组的第三个插槽上有一个 '\0' 字符,这不应该是问题吗?
【问题讨论】:
-
阅读
scanf()的文档可能会对您有所帮助。之后阅读sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html 了解它对您的伤害。 -
为了像您尝试使用的那样存储三个字母的字符串,您需要每个包含四个字符的数组,因为最后需要零。
-
好的,谢谢。我读到了这样一个事实,即 char 数组需要为
\0多留一个空间,但练习大约是三个大小为 10 的数组,并且输入在一行中大约有 30 个字符,所以我必须找到一种解决方法。谢谢大家。