c - C中单个文本字符串中的多个字符数组scanf

标签 c arrays char scanf

对于 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”
(没有“”)。

我尝试过,但需要按 Enter 键三次。

有没有一种方法可以用一行输入扫描多个数组?

我只能使用stdio.h和scanf。

编辑:

这是翻译后的完整练习(原始练习是意大利语)。

复制代码顶部的这些声明。

struct person {
    char name[10];
    struct person * mother;
    struct person * father;
} ;
typedef struct person Person;

编写一段代码,声明三个 Person 类型变量并从输入中读取:

儿子的名字(由10个字符组成,需要时添加特殊字符$)。

母亲的名字(与儿子的名字相同)。

父亲的名字(与儿子的名字相同)。

(如果父亲和母亲未知,则使用 NULL 常量)。

这将代表一个 3 人的家庭。 然后编写一个 void 函数来打印 Person 的母亲和父亲的名字。如果这些名称未知,则打印“Unknown”(检查指针是否不同于 NULL)。

对整个家庭成员调用此函数。

这是输入示例:

罗伯塔$$$安娜$$$$$$马西莫$$$

忽略练习的最后一部分,我的问题是输入由 30 个字符组成,名称数组长度为 10。我显然无法编辑名称数组的长度。

编辑: 我尝试在三个长度的数组上使用“%3s”解决方案,或者看起来工作正常,但是,如果数组的第三个插槽上有一个“\0”字符,这不应该是一个问题? p>

最佳答案

嘿 Snoopy3 堆栈溢出 不是一个完成家庭作业的平台。这里我只能通过修改你的代码来帮助你。

使用 scanf() 中的格式说明符,您可以在 C 语言的单个文本字符串中拥有多个 char 数组 scanf() )

试试这个代码:-

#include <stdio.h>

int main()
{
  char a[10], b[10], c[10];

  scanf("%10s%10s%10s", a, b, c);   // total 30 chars 10 per each string.

  for (int i = 0; i < 10; i++)      // removing rest '$';
  {
    if (a[i] == '$')
    {
      a[i] = '\0';
    }
    if (b[i] == '$')
    {
      b[i] = '\0';
    }
    if (c[i] == '$')
    {
      c[i] = '\0';
    }
  }

  printf(" \n %s ", a);
  printf("%s ", b);
  printf("%s", c);

  return 0;
}

输出:-

Roberta$$$Anna$$$$$$Massimo$$$

 Roberta Anna Massimo

关于c - C中单个文本字符串中的多个字符数组scanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51233879/

相关文章:

c - 在查找两个输入数组的并集和交集的 C 程序中,我在交集部分遇到问题

c - malloc 内存中的数据损坏

c - 数组连接函数返回乱码。

c - 在 gcc 中编译时关于警告输出的最佳实践?

c - 从 32 位拖放到 64 位

c++ - 从函数返回 char* 无效

c - 尝试初始化结构数组数组时在 ‘{’ 标记之前的预期表达式

javascript - 键数组,在 json 对象中查找值

比较 char 数组的两个值

c - 在 C 中,如何将 char* 转换为 hex