字符数组与scanf读取字符串

1 字符数组初始化及传递

字符数组的定义方法与前面介绍的一维数组类似。例如,

char c[10];

字符数组的初始化可以采用以下方式。
(1)对每个字符单独赋值进行初始化。例如,

c[0]='I';c[1]=' ';
c[2]='a';c[3]='m';c[4]='';
c[5]='h';c[6]='a';c[7]='p';c[8]='p';c[9]='y';

(2)对整个数组进行初始化。例如,

char c[10]={'I','a','m','h','a','p','p','y'}

一般不用以上方式,因为字符数组一般用来存取字符串。
通常采用的初始化方式是

char c[10]= "hello"。

因为 C 语言规定字符串的结束标志为’\0’,而系统会对字符串常量自动加一个’\0’,
为了保证处理方法一致,一般会人为的在字符数组中添加’\0’,
所以字符数组存储的字符串长度必须比字符数组少 1 字节。
例如,char c[10]最长存储 9 个字符,剩余的 1个字符用来存储’\0’。
【例】字符数组初始化及传递

#include <stdio.h>

void print(char c[])
{
int i=0;
while(c[i])
{
printf( "%c",c[i]);
i++;
}

printf(" " \n" ");
}
//字符数组存储字符串,必须存储结束符'\0'
 int main()
{
 char c[5]={ 'h', 'e','l', 'l', 'o'};
 char d[5]= "how";
printf( "%s \n" ",c); //会发现打印了乱码
printf( "%s \n" ",d);
print(d);
return 0;
}

上例中代码的执行结果如下图所示。为什么对数组赋值"hello"却打印出乱码,
这是因为
printf 通过%s 打印字符串时,原理是依次输出每个字符,当读到结束符’\0’时,结束打印;
在这里插入图片描述
我们通过 print 函数模拟实现 printf 的%s 打印 效果,
当 c[i]为’\0’时,其值是 0,循环结束,也可以写为 c[i]!=‘\0’

2 scanf 读取字符串

【例】scanf 读取字符串

#include <stdio.h>
//scanf 读取字符串时使用%s
int main()
{
char c[10]=;
char d[10];
scanf( "%s",c);
printf( "%s \n" ,c);
scanf( "%s%s",c,d);
printf( "c=%s,d=%s \n" ,c,d);
return 0;
}


scanf 通过%s 读取字符串,对 c 和 d 分别输入"zom"和"vox"(中间加一个空格),
scanf 在使用 %s 读取字符串时,会忽略空格和回车 ( 这一点与%d 和%f 类似 ) 。
输入顺序及执行结果如下图:
在这里插入图片描述

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
scanf函数可以用来输入字符串数组。可以使用%c格式符来逐个输入字符,并将其存储在字符数组中。为了输入完整的字符串,可以使用循环来连续输入字符,直到遇到结束标志。例如,可以使用do-while循环来输入字符串,并使用字符#作为结束标志。下面是一个示例代码: ```c #include <stdio.h> int main(void) { char array\[50\]; int i = 0; do { scanf("%c", &array\[i\]); } while (array\[i\] != '#' && ++i); array\[i\] = '\0'; printf("The string is: %s\n", array); return 0; } ``` 在这个示例中,我们使用了do-while循环来连续输入字符,并将其存储在字符数组中,直到遇到字符#为止。然后,我们在数组的末尾添加了一个空字符,以表示字符串的结束。最后,我们使用printf函数将输入的字符串输出到屏幕上。 #### 引用[.reference_title] - *1* [总结:C语言字符串输入的三种方式(scanf("%c",array); scanf("%s",str); gets(array);)](https://blog.csdn.net/qq_41631679/article/details/84239985)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [C语言字符数组的输入与输出:scanf,printf,getchar,putchar,gets使用方法](https://blog.csdn.net/qq_41706331/article/details/86406448)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rock Hang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值