在 C 中将字符扫描到数组中

Scanf a Character into an Array in C

我正在尝试获取数组中的单个字符,然后使用特定语法打印该字符。这是我的代码:

int main(){
char in[18];
scanf("%c",in);
printf("%c",in);
return 0;
}

我知道如何使用 C 和许多其他方法从用户那里获取字符来完成相同的任务,但我很想知道为什么这段代码在屏幕上不打印任何内容。这是我对这段代码的解释。如有不妥欢迎指正

  1. 首先声明了 18 个字符的数组。
  2. 使用scanf,字符存储在数组的第1个位置。("in"指的是第一个元素的地址。)
  3. 然后当我试图打印那个字符时,它什么也打印不出来。
  4. 当我将 "in" 更改为 "in[0]" 时,字符会打印在屏幕上。
  5. 我认为 "in" 也指向第一个元素以及在 [0] 中。那么为什么我得到两个不同的答案。 ?

提前致谢!!

您的代码调用了未定义的行为,编译器可能会警告 "%c" 说明符需要 char严格来说它需要 int参数转换为 unsigned char) 参数但你传递了一个 char *char 的数组)。

要使其打印字符,请使用

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

printf()scanf() 中为给定的格式说明符传递错误的类型是未定义的行为。

in[0] 不指向数组中的第一个元素。它数组中的第一个元素。

in 的类型为 char *(传递给函数时),而 in[0] 的类型为 charprintf%c 格式说明符需要 char,而不是 char *