您的位置:首页 > 其它

从csdn学到的c的基础之外的知识

2013-01-01 21:19 246 查看
本文主要是通过读一些比较好的博文,通过总结摘抄下来的一些比较有帮助的知识。

#include <stdio.h>

int main()
{
int i;
int ret;
scanf("%d",&i);
return 0;
}
这里的scanf中为什么是i的地址的原因是scanf本身是一个函数,也就是调用函数,如果你只传给他一个i的值他是不可能改变i本身的值的,只有传给他的是地址,才能改变。也就相当于用指针传递。//思考关于指针传递值的相关知识。

  当然scanf既然是一个函数那么就会有返回值,通过man scanf 查看


可以发现scanf的返回值为被成功复制的个数,例如

p=scanf(“%d%d”,&i,&g);
printf("%d",p);
可以查看被成功复制的个数,这样有时可以用在while中

#include <stdio.h>

int main()
{
int i;
int ret;
while(scanf("%d%d",&i,&ret)==2)
{
printf("%d\n%d",i,ret);
}
return 0;
}


这样可以只有当把所有你想要输入的数据都输入是才可以执行循环体。

如果调用scanf函数进行输入,但是输入了不正确格式的数据,再次循环输入,怎么不能输入了,且一直打印错误输入?

#include <stdio.h>

int main()
{
int i;

while(1)
{
scanf("%d",&i);
printf("%d\n",i);
}
return 0;
}
如果输入正常输入就会正常输出,可是如果输入13 然后再输入 d 就会一直输出13,。原因:

    这个原因就在于输入缓冲区了。(将在下一篇介绍),提到了输出缓冲区,scanf同样也有一个输入缓冲区。

调用scanf, scanf就会从它的输入缓冲区中来获取对应的数据,如果获取到就会传入再继续执行,否则就会等待输入。

当输入了字符d并回车后,scanf会将d和整形匹配,结果发现是不匹配的,所以会缓冲区中的内容,接着再次进入循环,

但是之前的输入缓冲区中依然保留着字符d呢,所以又会继续打印错误信息,依次循环永不停止。

处理方法     如果发现输入数据错误,那么清空输入缓冲区即可。使用rewind(stdin);即可,

#include <stdio.h>

int main()
{
int i;
int n;
while(1)
{
n=scanf("%d",&i);
printf("%d\n",i);
if(n!=1)
rewind(stdin);
}
return 0;
}


也可以用fflush(stdin)关于rewind与fflush 的区别点击

更好的方式
int ch;
while((ch = getchar()) != EOF && ch != '\n');
这算是在写的第一篇文章吧,感觉收获确实挺大的,没按照传统的开个博客先写一些自己的话,相当于序言,我就不写了,因为每次开始写东西的时候都不能坚持下来。希望这次能够坚持下来,因为感觉这样写正的很有用。

参考博文cc_team
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C