扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
在
scanf()
和printf()
函数中,%s
指的就是字符串
所以我们就可以使用scanf("%s",str)
和printf("%s",str)
从键盘处读取字符串并将字符串打印出来
代码如下:
int main()
{char str[10] = {0 };
scanf("%s", str);
printf("%s", str);
return 0;
}
这里要注意的一点是:在
scanf
函数中,后面的参数必须是一个地址,如输入一个整形变量:scamf("%d",&a)
,都需要进行&
取地址操作
但是数组名就已经是地址了(详解请点击观看我的一篇关于数组名到底是什么的文章)
所以直接用数组名即可,不用进行取地址
如果我们输入一个连续的字符串如:
abcde
,这段代码会正常运行
然而,如果输入一个非连续,也就是中间有空格的字符串时,代码只会打印出第一个空格以前的内容
这是因为在键盘与scanf
函数中,存在一个输入缓冲区,从键盘输入的内容会存放到这个缓冲区中
而
scanf
并不会读取走空格,它只能读取走字符以及字符串
例如当从键盘输入字符串abc 123
(注意abc
与123
之间是有一个空格的),在缓冲区中如图:scanf
首先会将字符串abc
取走,然后在abc
后面有一个空格,scanf
无法读取走空格,所以虽然从键盘输入abc 123
,但是最后只有abc
被存放在了str
中
所以最后只输出了abc
这里注意的是:前面讲的
scanf
无法读取输入缓冲区中的空格甚至是回车,这里的scanf
指的是scanf("%s",str)
,只是函数中是%s
才无法读取,而如果是scanf("%c",&character)
,输入一个字符,对于空格和回车都是能正常输入的,这里不要弄混
所以,用scanf
接受字符串是有局限性的。
前面已经讲了,用scanf
接受字符串是由局限性的,当字符串中含有空格,scanf
函数只能读取第一个空格以前的字符串,但是如果非要用scanf
进行接受字符串,只能是逐个字符处理
代码如下:
#includeint main()
{char ch[10];
for (int i = 0; i< 10; i++)
{scanf("%c", &ch[i]);
}
for (int i = 0; i< 10; i++)
{printf("%c", ch[i]);
}
return 0;
这样也可以进行对于字符串的输入以及输出
getchar
()与scanf
大的区别就是,getchar
可以读取走输入缓冲区中的空格以及回车
这里的内容我i之前有一篇文章进行了详细讲解,请点击查看
代码如下:
int main()
{char str[20] = {0 };
char ch = 0;
while ((ch = getchar()) != '\n')
{putchar(ch);
}
return 0;
}
用gets()输入字符串(简单快捷)这里介绍一个新的函数
gets()
,此函数在头文件string.h
中,使用此函数需要加头文件#include
gets
函数的官方格式:char * gets ( char * str );
在参数列表中,需要传一个字符型指针,也就是我们要输入的字符串的名(数组的名)gets()
函数的主要作用就是接受从键盘输入的一个字符串gets
当遇到换行符或者
EOF
时停止,并将读取的结果存放在str指针所指字符数组中
#include#includeint main()
{char str[10];
printf("请输入字符串");
gets(str);
printf("请输出字符串");
printf("%s", str);
return 0;
}
输入带有空格的字符串也可以正常输出
其实还存在一个与gets
函数配套的函数puts
函数,用来输出字符,具体用法与printf
和putchar
无差别
#include#includeint main()
{char str[10];
printf("请输入字符串: ");
gets(str);
printf("请输出字符串: ");
puts(str);
return 0;
}
gets函数与scanf、getchar的一些区别在前面的
scanf
函数和getchar
函数中,回车都需要值得注意,但是在get
函数中,回车不作为读取内容,遇到回车时,系统自动用\0
代替回车,所以输入一行字符串后按下回车,就完成了一次输入
gets
函数一遇到回车就结束,并把这个回车从缓冲区中移走,这点与scanf
不同,scanf
是遇到回车,空格就结束,但并不会将回车、空格从缓冲区中移走
gets
函数只会遇见回车时结束遇到空格、制表符都会正常读取,而scanf
遇到空格、回车、制表符都会结束,getchar
遇到空格、回车、制表符都正常读取
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流