字符串输入函数的若干不同

本文通过一个简单的C语言程序,展示了不同输入函数(getch(), getchar(), gets(), scanf())在处理回车键时的行为差异。getch()和getchar()将回车视为普通字符,而scanf()和gets()则在遇到回车时终止输入。
摘要由CSDN通过智能技术生成

最近在写程序的时候,发现虽然使用的是一样的输入,但是最后末尾结束的判别条件却千差万别。程序如下,输入的时候都使用的是:hello+回车

<pre name="code" class="cpp">#include"stdio.h"
#include"string.h"
#include"conio.h"
#define N 100
int main(int argc, char* argv[])
{
	char str1[N], str2[N], str3[N], str4[N];
	printf_s("\ngetch:");
	for (int i = 0; i < N; i++)
	{
		str1[i] = _getch();
		if (str1[i] == '\r')
		{
			break;
		}
	}
	printf_s("\ngetchar:");
	for (int i = 0; i < N; i++)
	{
		str2[i] = getchar();
		if (str2[i] == '\n')
		{
			break;
		}
	}
	printf_s("\ngets:");
	gets_s(str3);
	printf_s("\nscanf:");
	scanf_s("%s", str4, N);
	return 0;
}


 结果如下图: 


而每个字符数组中的元素如下图所示:



很明显当使用scanf()和get()作为录入的时候,当按下回车键之后,末尾都自动以'\0'自动结束,并认为此字符串输入完毕。

而当使用getch()和getchar()却不以回车键而结束,相反,回车作为一个字符存入了该字符串。

虽说都是回车,明显可以看出使用getch()的回车字符为'\r',getchar()的回车字符为'\n'。


'\r' 的'\n'的区别,网上是这么说的:

\r:回车符,返回到这一行的开头,return的意思。

\n:换行符,到下一行的同一位置,纵坐标相同,new line的意思。

scanf与get的区别,网上是这么说的:

scanf :当遇到回车,空格和tab键会自动在字符串后面添加'\0',但是回车,空格和tab键仍会留在输入的缓冲区中。(注:会影响到下次字符的输入)

gets:   可接受回车键之前输入的所有字符,并用'\0'替代 '\n',回车键不会留在输入缓冲区中。



嗯,发个博文,做个标记,下次遇到就不会像现在这么郁闷了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>