P73——使用字符串

#include <stdio.h>
#define PRAISE "you are an extraordinary being. "//c预处理器定义字符串常量
int main()
{
	char name[40];		//[]表示数组,此处name是一个可容纳40个字符的数组

	printf("what's your name?");
	scanf("%s",name);			        //用%s处理字符串的输入和输出
	printf("%s,%s\n",name,PRAISE);		//用%s处理字符串的输入和输出
	
	getchar();
	getchar();
	return 0;
}

程序运行时发现一个问题:如果输入的名字为一个连在一起的字符串(zhao),则不会出现问题,程序正常;但是若输入为含有空格的字符串(zhao guangyuan),则输入该字符串后,并不会继续打印下一行printf("%s,%s\n",name,PRAISE);

那么是什么原因呢?
下面是一个相同的例子:

//sizeof()以字节为单位给出对象的大小,strlen()给出字符串中的字符长度
#include <stdio.h>
#include <string.h>
#define PRAISE "you are an extraordinary being. "
int main(void)
{
	char name[40];

	printf("what's your name?");
	scanf("%s",name);
	fflush(stdin);		//C语言清空输入缓冲区函数
	printf("hello.%s,%s\n",name,PRAISE);

	printf("your name of %u letters occupies %u memory cells.\n",strlen(name),sizeof name );
	printf("the phrase of parise has %u letters,",strlen(PRAISE));
	printf("and occupies %u memory cells",sizeof PRAISE );

	getchar();
	return 0;
}

通过加上清空缓冲区函数fflush(stdin);,即可正常显示,结果如下:
(scanf()只读取字符串中的一个单词,而不是一整句)
scanf()只读取字符串中的一个单词,而不是一整句

解决办法:(二办法任选其一)
1。清空输入缓冲区:原来scanf是从标准输入缓冲区中读取输入的数据,而%s(或者%c%d等等)的字符输入格式会接收回车字符,在输入第一个scanf时输入字符后按回车结束,输入缓冲中保存了这个回车符,遇到printf时直接给了printf,所以下一行的printf不能正常打印
第一个scanf后加入语句:fflush(stdin); //C语言清空输入缓冲区函数
2。格式控制中加入空格
将第二个scanf改为:scanf(" %c",&ch2);//在%号前面加一个空格

此外,在使用getchar()输入字符的时候也会出现上述情况,此时除了可以用上述中方法一解决之外,对应的方法二可以可以改为:写两个getchar();

sizeof()以字节为单位给出对象的大小,strlen()给出字符串中的字符长度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值