scanf和cin怎么处理空格和回车?

1、scanf怎么处理空格和回车?

int main()
{
	char ch[100];
	scanf("%[^\n]%*c",ch);
	printf("%s",ch);
	return 0;
}
输入:I am a student
输出:I am a student

scanf函数处理输入的时候遇到空格会结束。

利用scanf(“%[^\n]”,str); 可以读取一行字符串,直到遇到换行符\n结束
经过此方法读取字符串以后,会有一个换行符号\n存在输入缓冲区中,因此需要用scanf("%*c”); 清

理输入缓冲区中第一个字符,也就是上次遗留下的\n

将两个式子组合在一起就是:scanf(“%[^\n]%*c”,str);

2、cin怎么处理回车和换行?

int main()
{
	char ch[100];
	cin.getline(ch,100);
	printf("%s",ch);
	return 0;
}

事实上,cin使用空白(空格、制表符和换行符)来确认字符串的结束位置,这意味着不要以为你敲了一大堆按下回车的时候觉得输出的是你回车前面的所有字符,只要你输入有空格或者制表符,那空格或制表符后面敲的都不会输出!因此直接cin并不是一次读取回车前的整行!

解决方法:cin.getline()和cin.get()函数
cin.getline()

cin.gteline函数有两个参数,第一个是用来存储输入行的数组的名称,第二个参数是要读取的字符数,如果这个参数为20,则函数最多可以读取19个字符,余下的空间用来存储自动在结尾处添加的空字符。getline成员函数在读取指定数目的字符或遇到换行符时停止读取。

cin.get()

cin.get函数与cin.getline函数接受的参数相同,但是由于cin.get不丢弃换行符的原因,我们往往在两个cin.get函数间插入一个空的cin.get表示读取下一个字符!

int main()
{
	char ch[100];
	cin.get(ch,100).get();
	printf("%s",ch);
	return 0;
}
int main()
{
	char ch[100];
	cin.get(ch,100);
	cin.get();
	printf("%s",ch);
	return 0;
}

你可能感兴趣的:(c++)