对于C语言中的scanf函数的使用问题总结

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);大家一定要注意我上面说的三个例子。

相关文档
最新文档