鱼C论坛

 找回密码
 立即注册
查看: 1418|回复: 7

[已解决]代码有错误么?

[复制链接]
发表于 2019-1-29 16:49:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目描述:
已知鸡和兔的总数量
nn
n,总腿数为
mm
m。请输出鸡和兔的只数。
输入:
每行两个整数(不超过100000)分别表示
n,mn,m
n,m。多组输入,以EOF做结束。
输出:
每行输出两个数,分别是鸡和兔的数目。如果不能求解,则输出"No answer"
#include<stdio.h>
int main()
{
        int n[100],m[100],x[100],y[100],i,k=0;
        for(i=0;i<100;i++)
        {
                scanf("%d %d",&n[i],&m[i]);
                k+=1;
                if(n[i]==EOF&&m[i]==EOF) break;
        }
        for(i=0;i<k;i++)
        {
                x[i] = (m[i] -2*n[i])/2;
                y[i] = n[i] - x[i];
        }
        for(i=0;i<k;i++)
        {
                        if(x[i] < 0 ||y[i] < 0||m[i]%2!=0)
                        printf("No answer\n");
                        else 
                        printf("%d %d\n",y[i],x[i]);
        
        }
        return 0;
}
最佳答案
2019-1-29 19:35:07
EOF的判断条件是while(scanf("%d%d",&n,&m)!=EOF),下面是我写的代码,你看看能不能看懂
#include<stdio.h>
int main()
{
    int m,n,x,y;
    while(scanf("%d%d",&m,&n)!=EOF)
    {
        x = (m -2*n)/2;
        y = n - x;
        if(x < 0 ||y < 0||m%2!=0)
            printf("No answer\n");
        else
            printf("%d %d\n",y,x);
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-29 19:35:07 | 显示全部楼层    本楼为最佳答案   
EOF的判断条件是while(scanf("%d%d",&n,&m)!=EOF),下面是我写的代码,你看看能不能看懂
#include<stdio.h>
int main()
{
    int m,n,x,y;
    while(scanf("%d%d",&m,&n)!=EOF)
    {
        x = (m -2*n)/2;
        y = n - x;
        if(x < 0 ||y < 0||m%2!=0)
            printf("No answer\n");
        else
            printf("%d %d\n",y,x);
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-29 21:19:22 | 显示全部楼层
迷雾道长 发表于 2019-1-29 19:35
EOF的判断条件是while(scanf("%d%d",&n,&m)!=EOF),下面是我写的代码,你看看能不能看懂
#include
int ...

在输入两个-1后无法跳出循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-1 10:55:03 | 显示全部楼层
NYJYA 发表于 2019-1-29 21:19
在输入两个-1后无法跳出循环


你对scanf函数有误解,scanf函数的返回值是正确读取参数个数,你输入两个-1,scanf能够读取到两个%d,因此返回值为2,而不是EOF,所以程序不会结束。
把迷雾道长的程序中while循环判断条件改为  while(scanf("%d%d",&m,&n)==2)可能会更好一些,只要是没有把m、n两个参数同时读取到就结束循环。
若是你打算以输入两个-1结束程序,那么则需要进一步修改。
#include<stdio.h>
int main()
{
    int m,n,x,y;
    scanf("%d%d",&m,&n);
    while(m!=-1&&n!=-1)
    {
        x = (m -2*n)/2;
        y = n - x;
        if(x < 0 ||y < 0||m%2!=0)
            printf("No answer\n");
        else
            printf("%d %d\n",y,x);
        scanf("%d%d",&m,&n);
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-2 20:11:20 | 显示全部楼层
sunrise085 发表于 2019-2-1 10:55
你对scanf函数有误解,scanf函数的返回值是正确读取参数个数,你输入两个-1,scanf能够读取到两个%d, ...

谢谢,但是我想问一下EOF不是-1吗?所以结束条件不应该是输入-1吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-3 21:46:05 | 显示全部楼层
NYJYA 发表于 2019-1-29 21:19
在输入两个-1后无法跳出循环

你想要在输入那里实现那个EOF就输入ctrl+z就是实现不输入的情况,也就是题目的那种情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-3 21:46:41 | 显示全部楼层
NYJYA 发表于 2019-2-2 20:11
谢谢,但是我想问一下EOF不是-1吗?所以结束条件不应该是输入-1吗?

EOF是输入ctrl+z
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-4 23:52:11 | 显示全部楼层

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 08:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表