C语言字符和字符串的输入与输出

这篇具有很好参考价值的文章主要介绍了C语言字符和字符串的输入与输出。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C语言

一、输入单个字符

1、scanf函数输入单个字符

C语言scanf输入时缓冲区问题
scanf函数是标准输入流(从键盘接收数据),接收的数据放入输入缓冲区中,其中就包括在键盘输入的空格、回车这类字符,当你用%d接收时是不会影响的,但是用%c就会产生错误,这是因为在"%c"输入时,空格和转义字符均作为有效字符会被%c接收。
例如:

#include <stdio.h>
int main()
{
	char a,b,c;
	scanf("%c%c%c",&a,&b,&c);
	printf("%c,%c,%c",a,b,c);
	return 0;
} 

运行结果:
C语言字符和字符串的输入与输出

解决方法:
1.在接收第二个数之前清空缓冲区getchar(),getchar()是清空—个字符,如果缓冲区还有多余的字符则会被正常使用
例如:

#include <stdio.h>
int main()
{
	char a,b,c;
	scanf("%c",&a);      
	scanf("%c",&b); 
	printf("a=%c,b=%c",a,b);
	return 0;
} 

运行结果:
C语言字符和字符串的输入与输出
这里我们预想的效果应该是先输入a的值回车后输入b的值。但是通过运行结果可以发现,当我们输入a的值回车后,直接跳过了输入b的值。这是因为scancf不是直接从键盘上获取数据,而是通过缓存区来获取。scanf会先去看缓冲区中是否有数据,如果有就直接拿走,并不需要键盘输入。如果没有就需要等待键盘输入数据到缓冲区,然后再从缓冲区中取走数据。
C语言字符和字符串的输入与输出
这里我们按了键盘上的1和回车,这时1\n(回车就是\n也算个字符)就被传入了缓冲区,而scanf函数只会取走\n之前的数据,缓冲区就遗留了个\n。当第二个scanf函数开始读取时就直接从缓冲区中取走了\n,就导致我们没来得及输入就直接跳过了。

getchar的作用是读取一个字符,也是输入函数,所以和scanf读取数据的过程一样,都是从缓存区中获取数据。为了不跳过第二个scanf,我们就可以在接收第二个数之前清空缓冲区,用getchar将缓存区的\n取走。

#include <stdio.h>
int main()
{
	char a,b,c;
	scanf("%c",&a); 
	getchar();    // 清空缓存区,把\n清除      
	scanf("%c",&b); 
	printf("a=%c,b=%c",a,b);
	return 0;
} 

运行结果:
C语言字符和字符串的输入与输出

2.在%c之前加入空格,空格可以吸收回车符、空格。如果是在循环中多个scanf输入多个字符,建议使用",“进行隔开,并且在键盘输入的时候也要使用”,"
例如:

#include <stdio.h>
int main()
{
	char a,b,c;
	scanf("%c %c %c",&a,&b,&c);
	printf("%c,%c,%c",a,b,c);
	return 0;
} 

运行结果:
C语言字符和字符串的输入与输出

2、getchar函数输入单个字符
#include <stdio.h>        
int main()
{
    printf("Please input two character: ");
    int ch=getchar();         //从缓存区中读取1个字符并赋给ch 
    putchar(ch);			  //输出字符
    putchar('\n');
    putchar(getchar());      //从缓存区中读取1个字符并输出
    putchar('\n');
}                         

Please input two characters: ok↙
o
k

注:getchar()的返回值类型为int()

二、输入字符串

1、scanf函数输入字符串
#include <stdio.h>
int main()
{
    char str[20];  //str是string的缩写, 即字符串
    printf("请输入字符串:");
    scanf("%s", str);  /*输入参数是已经定义好的“字符数组名”, 不用加&,
                        因为在C语言中数组名就代表该数组的起始地址*/
    printf("输出的结果是:%s\n", str);
    return 0;
}

例1.
请输入字符串:天天开心
输出的结果是:天天开心

例2.
请输入字符串:i am working
输出的结果是:i

出现例2的原因:
原因是用 scanf 输入带空格的字符串时系统将空格作为输入字符串之间的分隔符。也就是说,只要一“敲”空格,系统就认为当前的字符串已经结束,接下来输入的是下一个字符串,所以只会将空格之前的字符串存储到定义好的字符数组中。
那么这种情况该怎么办?
解决方法:
以空格为分隔符,数有多少个字符串,有多少个字符串就定义多少个字符数组。比如“i am working”有两个空格,表示有三个字符串,那么就定义三个字符数组:

# include <stdio.h>
int main()
{
    char str1[20], str2[20], str3[20];
    printf("请输入字符串:");
    scanf("%s%s%s", str1, str2, str3);
    printf("输出的结果是:%s %s %s\n", str1, str2, str3);  //%s间要加空格
    return 0;
}

请输入字符串:i am working
输出的结果是:i am working

2、gets函数输入字符串

在<string.h>头文件中

字符串输入函数gets
格式:gets(字符数组)
功能:从键盘键入以回车结束的字符串放入字符数组中,并自动加’\0’
说明:输入串长度应小于字符数组维数,字符串中可以包含空格

字符串输出函数puts
格式:puts(字符数组)
功能:向显示器输出字符串(输出完,自动换行,即用’\n’替’\0’)
说明:字符数组必须以’\0’结束

#include <stdio.h>
#include <string.h>
int main()
{
    char str[20];
    printf("请输入字符串:");
    gets(str);
    printf("请输出字符串:");
    puts(str);
   return 0;
}

请输入字符串:so cute
请输出字符串:so cute文章来源地址https://www.toymoban.com/news/detail-407252.html

到了这里,关于C语言字符和字符串的输入与输出的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包