对于C语言中的scanf函数的使用问题总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
对于C语言中的scanf函数的小结
对于scanf函数的作用大家应该都知道吧。在任何一本C语言的教材中都有过介绍,它的一般形式是(格式控制,地址表列)
我今天想说说使用这个scanf函数的时候,应该注意哪些问题吧。
1.scanf函数中的格式控制应该是变量名的地址,而不是变量名,例如a和b为整形变量,如果写成scanf(“%d%d”,a,b); 就会出错的,应该将这个,a,b改成&a,&b;(表示地址)
2我们都知道C语言中的字符串是存放到字符数组中的,如果我们定义了一个字符数组,如char a[20];我们想把字符串输入到这个字符数组中通常有两种方式,第一种.逐个字符输入,采用for循环的形式。第二种,直接输入字符串的形式,用格式控制符%s.第一种我们这样输入,
for(i=0;i<=19;i++)
{
Scanf(“%c”,&a[i]);
}
第二种我们用这种方式输入
Scanf(“%s”,a);
注意第二种这种形式,我们没有加&,这是为什么呢,这是
因为,C语言中把这个数组名当做该数组的起始地址。但是这种数组仅限于字符数组,不要企图,利用数值型数组的名。来整体输入,一个数值型的数组,这就是大错误了,比如这样写是不正确的
Int a[10];
Scanf(“%d”,a);
数值型数组的输入只能采用上面的第一种方法。
3对于指针问题,大家需要注意一点,
指针就是地址,这是在任何条件下都成立的,(请允许我极端一点),比方看下面的例子。
Char *p;
Char a[20];
P=a;
For(i=0;i<20;i++,p++)
{
Scanf(“%c”,p);
}
这是一个采用指针变量输入数据的例子,这里的指针变量p 在for循环之前就指向了这个数组a,也就是指向了数组的首元素,也就是是说指针变量p里存放的是,数组首元素的地址,所以在用这个scanf函数进行输出时,指针变量的前方就不用再加取地址符号了。
4.这个问题是整个scanf函数使用过程中最容易出错的一个地方。就是关于用scanf函数在用“%c”格式声明输入字符的时候,是最容易出错的一个地方。
一点一点进行,下面请看一个简单的例子:
看下面的一个程序,
(1)
#include
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%d%d%d\n",a,b,c);
return 0;
}
我们想要输入三个整数,输入的时候我们要注意了,这里的scanf函数中的格式控制是三个连续的%d,除了格式声明以外中间没有任何其他的字符,这个时候我们输入数据应该加入空格,否则执行不了。1 2 3(1,2之间有空格,2,3之间有空格,(具体原因会在例题2中阐明)加入其他符号也是不可以的)
(2)经过第一道的例题,似乎让我明白了这样的一个规律,如果中间都是除了格式声明以外中间没有任何其他的字符,
那我就可以用空格,来隔开我的数据了。
看看下面的例题
#include
int main()
{
char a,b,c;
scanf("%c%c%c",&a,&b,&c);
printf("%c%c%c\n",a,b,c);
return 0;
}
我的输入还是仿照上面,进行截图如下所示
我们发现输出并不是我们想象的那样,而是出现了错误,下面我们来解释一下原因,因为我们原来输入的位数值型的数据,所以我们要区分数值的个数,以及位数,比方我想输入
23 234 456这三个数,我要是连续的把这8个数输入进去,计算机也无法区分,这到底是几个数,所以我们用空格加以区分,这样计算机遇到空格就知道这个数值型的数已经输入完毕了(这是例题1中我们为什么加空格的原因),但是为什么在例题2中我还是这样做,就不可以了呢,这是因为我们现在输入的是字符型数据,而且字符型数据不是像数值型数据那样,有几位数字,字符型的数据只有一位,所以你输入一位数据他就给一个变量,所以不需要像数值型的数据那样隔开了,所以我们直接输入三个连续的字母asd就可以了,就不用空格分开了,如果我们输入a空格s空格d,那么他就会默认的把前三个字符送给三个变量了,也就是a空格s(因为空格也是一个字符)。
(3)下面大家看一下这道例题。
//下面程序很简单,就是输入两个数和一个运算符号,
#include"stdio.h"
void main()
{
int ;
float z,x,y;
char cc;
printf("please enter date:\n");
scanf("%f%c%f",&x,&cc,&y);
if(cc=='+')
z=x+y;
if(cc=='-')
z=x-y;
if(cc=='*')
z=x*y;
if(cc=='/')
z=x/y;
printf("%f\n",z);
}
我们连续输入三个1+2
结果输出3,截图如下
这里要注意的是,输入1之后不能有空格,因为下面是一个字符型数据,输入字符型数据之后,就可以有空格了,因为
后面是一个数值型数据。(所以按照这种方式输入也可以
1+ 2)
(4),如果在“格式控制字符串中”除了格式声明还有其它字符,则在输入数据的时候,在对应的位置上应该输入与这些字符相同的字符。
#include
int main()
{
int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
printf("%d%d%d\n",a,b,c);
return 0;
}
我们在输入数据的时候应该这样输入,1,2,3
我要讲的内容就要讲完了,下面和大家说说在输入这个数据的时候,尽量加入,分隔,scanf("%d,%d,%d",&a,&b,&c); 这样不容易出错,如果什么符号也不用直接这样的话scanf("%d%d%d",&a,&b,&c);大家一定要注意我上面说的三个例子。