关于scanf的探索

为什么探究scanf(),因为水题的时候出了点差错。。。

HDU2008数值统计

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 125294    Accepted Submission(s): 60151

Problem Description

统计给定的n个数中,负数、零和正数的个数。

 

 

Input

输入数据有多组,每组占一行,每行的第一个数是整数nn<100),表示需要统计的数值的个数,然后是n个实数;如果n=0,则表示输入结束,该行不做处理。

 

 

Output

对于每组输入数据,输出一行a,bc,分别表示给定的数据中负数、零和正数的个数。

 

 

Sample Input

6 0 1 2 3 -1 0

5 1 2 3 4 0.5

0

 

 

Sample Output

1 2 3

0 0 5

 

 

Time Limit Exceeded的代码:

#include<stdio.h>
int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
	//if(n==0)break;
        int f=0,l=0,z=0;
        while(n--){
            float x;
            scanf("%f",&x);
            if(x<0)f++;
            else if(x>0)z++;
            else l++;
        }
        printf("%d %d %d\n",f,l,z);
    }
    return 0;
}

 
错误原因在哪里:while(scanf("%d",&n)!=0)中的scanf()在遇到表示数据结束的0输入时,它的返回值时1,循环还能继续下去,但没有输入就死循环了。加一句if(n==0)break;

 



scanf()探究:

1.整数输入:

int m;

int k=scanf(%d,&m);

输入一个负数,0或整数,scanf()的返回值k=1.

 

int m,n;

int k=scanf(%d %d,&m,&n);

输入两个负数,0或整数,scanf()的返回值k=2

 

 

2.浮点数输入:同理



3.字符输入:char m;



int k=scanf(%c,&m);

输入一个字符(如果输入数字5,也是这样,因为5也算是一个字符),scanf()的返回值k=1.

 

char m,n;

int k=scanf(%c %c,&m,&n);

输入一个字符(如果输入数字5,也是这样,因为5也算是一个字符),scanf()的返回值k=2.

 

 4.混合输入A


int m,n;

int k=scanf(%d %d,&m,&n);

输入1dscanf()的返回值k=1

 

int m,n,p;

int k=scanf(%d %d %d,&m,&n,&p);

输入1d1scanf()的返回值k=1

 

这里,当scanf检测到输入d发生错误,立即结束退出,只统计前面正确的数据。

5.混合输入B

char m,n;

int k=scanf(%c %c,&m,&n);

输入d1还是1dscanf()的返回值k=2

 

其实,数字1也算是一个字符。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值