您的位置:首页 > 编程语言 > C语言/C++

gets和scanf函数初篇

2016-03-27 22:24 344 查看
: 这一定是我在学习C语言中遇到的第一个大问题,时而感觉搞清楚了,时而又被绕在了里面,那就是gets,getchar还有scanf的区别。

因为一开始我们会经常面临这样这样的问题,人家让我们通过标准输入来输入一些字符或者数字等等,然后再在屏幕上显示出来。我们老师当时就喜欢出这样的问题给我们,让我当时很头大。明明是感觉很简单的问题,但是真正在编写代码的时候却总是出现这样那样的问题。

接下来我们看几个简单的例子:

em1:

通过键盘输入“Hello World”,并在屏幕上显示。

用scanf函数输入:

#include<stdio.h>
#include<windows.h>

int main()
{
char arr[10];
printf("input the words\n");
scanf_s("%s", arr,10);
printf(arr);
system("pause");
return 0;
}


当我输入"Hello World"的时候,会发现屏幕只给我输出了"Hello",得不到我想要的结果。
当我使用gets函数的时候


#include<stdio.h>
#include<windows.h>

int main()
{
char arr[20];
printf("input the words\n");
gets_s(arr,20);
printf(arr);
system("pause");
return 0;
}


就能得到我想要的结果"Hello World".当然这只是一个很简单的例子,相信很多人都知道其中的缘由。


1.scanf()

所在头文件:stdio.h

语法:scanf(“格式控制字符串”,变量地址列表);

接受字符串时:scanf(“%s”,字符数组名或指针);

2.gets()

所在头文件:stdio.h

语法:gets(字符数组名或指针);

两者在接受字符串时:

1.不同点:

scanf不能接受空格、制表符Tab、回车等;

而gets能够接受空格、制表符Tab和回车等;

2.相同点:

字符串接受结束后自动加’\0’。

: 还有相当重要的一点,就是我在设定
arr【】
的大小的时候,需要事先确定好你需要多大的空间来存放你所输入的字符串,比如刚才我如果输入一行n,程序就会出现输出乱码,下图是scanf函数时,如果用的是gets,会弹出报错窗口,这就是你输入的东西超过你事先定好的空间,也就是越界。

我这里用的是VS2013,可以看到我在程序中调用的是scanf_s函数和gets_s函数,这是人们约定了这么一个相比scanf和gets能安全点的函数,所以我在使用函数的时候后面的参数需要加上事先定好的空间长度。如果在早期的VC6.0版本的话,scanf函数时可以被越界的,这就造成了很多的bug。



: 虽然这些东西都很简单,但我们必须要搞清楚,避免稍不注意就会在写代码的时候出现错误。

可能在一些人看来,这下东西都是基本常识,但正是这样,我才希望大家能在以后的写简单代码的时候不会犯这样的错误,虽然这些函数现在用到的地方很少。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 函数 标准