【问题标题】:How to take character input in an array in C?如何在C中的数组中输入字符?
【发布时间】:2018-01-14 01:02:15
【问题描述】:
char name[2];
scanf("%c",name);
printf("%c",name);

我刚刚开始学习 C。我对上面的代码很好奇,我从 printf 输出中得到的内容与我输入的字符不同。而是输出是一些看起来很有趣的符号。谁能给我解释一下?

【问题讨论】:

  • name 是一个数组,%c 需要一个 char(实际上需要一个 int 参数);例如,要打印char,请使用printf("%c", name[0]);
  • 如果你需要一个字符数组作为输入,你应该使用 scanf("%s",name), printf("%s",name);而不是使用 %c 。 %c 返回指向字符的指针,该字符不能存储在指向字符数组的指针中。
  • scanf("%c",name)==>scanf("%s",name) 和 printf("%c",name)==>printf("%s",name );
  • name 不是字符而是字符 [2]。更改 printf 格式
  • @sourabh1024 什么? %c 返回指向什么的指针?

标签: c arrays printf scanf


【解决方案1】:

如果您的输入包含小于或等于 2 的字符,您将获得正确的输出,就像您的输入一样,如果您的输入包含大于 3 的字符,则它不起作用

【讨论】:

  • 要读取包含更多字符的字符串,只需将字符数组增加到 a[300] 或 a[字符串中的字符数]
  • 这个答案没有解决 OP 问题,也与问题的行为无关。该问题涉及说明符而不是输入大小。
【解决方案2】:

对于%c 说明符,scanf 需要存储字符的位置的地址,但printf 需要字符的值,而不是其地址。在 C 中,数组在被引用时衰减为指向数组第一个元素的指针。因此,scanf 被传递给name 数组的第一个元素的地址,这是字符将存储的位置;但是,printf 也被传递了地址,这是错误的。 printf 应该是这样的:

printf("%c", name[0]);

请注意,scanf 参数在技术上是可以的,传递一个数组有点奇怪,而指向单个字符的指针就足够了。最好声明一个字符并显式传递其地址:

char c;
scanf("%c", &c);
printf("%c", c);

另一方面,如果您尝试读取字符串而不是单个字符,那么您应该使用%s 而不是%c

【讨论】:

    【解决方案3】:

    读取单个字符

    char name[2];
    scanf("%c",name);
    printf("%c",name[0]);
    

    或者读取一个字符串

    char name[2];
    scanf("%1s",name);
    printf("%s",name);
    

    【讨论】:

      【解决方案4】:

      您需要 %s 因为 name 包含 2 个元素。 %c 用于单个字符,因此如果您希望用户输入某些内容,例如"as"(没有 "") 和打印出来的程序你需要 %s。

      char name[2];
      
      scanf(" %s", name);
      printf("%s",name);
      

      【讨论】:

      • scanf(" %s", name);%s 之前的空格是不必要的。它会清除任何前导空格,但无论如何都会发生%s 格式。但是对于问题中的%c 格式,它通常 需要的,因为在这种情况下,除非包含该空格,否则空格不会 被清除。
      • @WeatherVane 这就是我学习编程的方式,它一直陪伴着我:D
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      • 2017-12-22
      • 2017-05-21
      • 2015-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多