当前位置: > 投稿>正文

c语言scanf,scanf函数c语言用法(深入scanf<一>)

04-14 互联网 未知 投稿

关于【c语言scanf】,scanf函数c语言用法,今天涌涌小编给您分享一下,如果对您有所帮助别忘了关注本站哦。

1、c语言scanf:精通C语言014 深入scanf(一)

scanf是C语言中最常用的一个函数,主要用于键盘输入,最近准备由浅入深做一个scanf的系列。

文件缓冲区的概念

缓冲区,通俗地说就是一块内存。键盘敲入数据时,先存在缓中区中,而scanf读入数据相当于从这个缓冲区中读数据,表面上的概念是这些。

当前我们主要研究scanf,因此文件的底层不是主题。首先我们从一个最简单的例子开始,输入一个整数,代码如下:

int d;scanf("%d",&d);

输入数据之后,scanf函数会在数据中做个过滤,比如输入:□□123↘。(其中方块表示空格,箭头表示回车,以下同)

scanf会过滤掉前面的空格,读到123,然后一直到第一个非数字字符结束。因此,最终会捕获到123。

scanf这样做主要原因是格式化做了指示:%d。

留下了一点东西

空格被过滤,123被拿到,但此时还留有一个回车符↘留在缓冲区中。如果我们再读一次,scanf未必就让用户再输入,而是从缓冲区中直接拿,代码如下:

int d;scanf("%d",&d);//输入□□123↘char c;scanf("%c",&c);printf("%d\n",c); //输出10

此时回车符0x0A被捕获到变量c中,输出为10。

可以看到,这里隐藏了一个陷阱,但scanf似乎必须依赖回车标志一个输入的结束。怎么解决剩下的回车键呢?

使用fflush()

flush意思是涮洗,清洗,因此fflush就表示文件清洗,主要用于刷新文件缓冲区。用法:

fflush(stdin);

我们使用fflush将stdin¹的缓冲区清空,那么残留的回车键也就不存在了,因此scanf就会要求用户再次输入,代码如下:

int main(int argc, char* argv[]){int d;scanf("%d",&d);fflush(stdin);//刷新char c;scanf("%c",&c);printf("捕获字符:%d\n",c);return 0;}

通过修正,此时程序运行正确。

¹注:在系统的视角中,一切皆文件,因此键盘输入也是文件,使用stdin表示,这和通过fopen(...)打开的文件符相似。

这一篇简单地做个入门,下一篇继续深入讨论。

2、c语言scanf,scanf函数c语言用法

在学习C语言时,通常使用scanf()函数获得从键盘输入的数据。

那么scanf()函数有返回值吗?回答是肯定的。

1.scanf()函数有返回值且为int型。

2.scanf()函数返回的值为:正确按指定格式输入变量的个数;也即能正确接收到值的变量个数。

例如:

scanf("%d%d", &a, &b);

如果a和b都被成功读入,那么scanf()的返回值就是2;

如果只有a被成功读入,返回值为1;

如果a和b都未被成功读入,返回值为0;

如果遇到错误或遇到end of file,返回值为EOF。EOF是一个预定义的常量,等于-1。#define EOF -1

我们可以通过下面的代码得到验证。

int main()

{

int a;

int b;

int c;

int x;

printf("请输入三个整数:\n");

x=scanf("%d%d%d",&a,&b,&c);

printf("x=%d\n", x);

}

这里用变量x接收scanf()函数的返回值,并输出显示出来。

上述代码要求运行中输入三个整数:

如果输入5 6 7,则x的值为3;

如果输入5 6 d(即给c 赋值不正确),则x的值为2;

如果输入5 t d(即给b和c 赋值不正确),则x的值为1;

如果输入d 5 2 则输出x=0,也就是说第一个字符d输入错误,整个scanf()没有收到输入值。

其实scanf()的返回值是很有用的,比如在使用这个函数进行接收值时,我们有必要知道对要给赋值的变量是否正确的赋值成功了,所以可以使用if(scanf("%d,%d",&a,&b)==2)这样语句来判断是否正确地给所有的变量赋值,正确的话才能使用这个变量参与运算,这样才能提高代码的安全性。

例如,下面的问题就需要借助于scanf()返回值作为循环的条件。

输入不说明有多少个Input Block,以EOF为结束标志。

参见:HDOJ_1089(http://acm.hdu.edu.cn/showproblem.php?pid=1089)

A B for Input-Output Practice (I)

【Problem Description】

Your task is to Calculate a b.

Too easy?! Of course! I specially designed the problem for acm beginners. You must have found that some problems have the same titles with this one, yes, all these problems were designed for the same aim.

【Input】

The input will consist of a series of pairs of integers a and b, separated by a space, one pair of integers per line.

【Output】

For each pair of input integers a and b you should output the sum of a and b in one line, and with one line of output for each line in input.

【Sample Input】

1 510 20

【Sample Output】

630

其源代码为:

#include <stdio.h>

int main()

{

int a,b;

while(scanf("%d %d",&a, &b) != EOF)

printf("%d\n",a b);

return 0;

}

本文关键词:c语言scanf用法例子,c语言scanf返回值被忽略怎么解决,c语言scanf是什么意思及用法,c语言scanf格式,c语言scanf的用法。这就是关于《c语言scanf,scanf函数c语言用法(深入scanf<一>)》的所有内容,希望对您能有所帮助!更多的知识请继续关注《犇涌向乾》百科知识网站:http://www.029ztxx.com!

版权声明: 本站仅提供信息存储空间服务,旨在传递更多信息,不拥有所有权,不承担相关法律责任,不代表本网赞同其观点和对其真实性负责。如因作品内容、版权和其它问题需要同本网联系的,请发送邮件至 举报,一经查实,本站将立刻删除。

猜你喜欢