NYJYA 发表于 2019-1-29 16:49:26

代码有错误么?

题目描述:
已知鸡和兔的总数量
nn
n,总腿数为
mm
m。请输出鸡和兔的只数。
输入:
每行两个整数(不超过100000)分别表示
n,mn,m
n,m。多组输入,以EOF做结束。
输出:
每行输出两个数,分别是鸡和兔的数目。如果不能求解,则输出"No answer"
#include<stdio.h>
int main()
{
        int n,m,x,y,i,k=0;
        for(i=0;i<100;i++)
        {
                scanf("%d %d",&n,&m);
                k+=1;
                if(n==EOF&&m==EOF) break;
        }
        for(i=0;i<k;i++)
        {
                x = (m -2*n)/2;
                y = n - x;
        }
        for(i=0;i<k;i++)
        {
                        if(x < 0 ||y < 0||m%2!=0)
                        printf("No answer\n");
                        else
                        printf("%d %d\n",y,x);
       
        }
        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;
}

NYJYA 发表于 2019-1-29 21:19:22

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

在输入两个-1后无法跳出循环

sunrise085 发表于 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;
}

NYJYA 发表于 2019-2-2 20:11:20

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

谢谢,但是我想问一下EOF不是-1吗?所以结束条件不应该是输入-1吗?

迷雾道长 发表于 2019-2-3 21:46:05

NYJYA 发表于 2019-1-29 21:19
在输入两个-1后无法跳出循环

你想要在输入那里实现那个EOF就输入ctrl+z就是实现不输入的情况,也就是题目的那种情况

迷雾道长 发表于 2019-2-3 21:46:41

NYJYA 发表于 2019-2-2 20:11
谢谢,但是我想问一下EOF不是-1吗?所以结束条件不应该是输入-1吗?

EOF是输入ctrl+z

NYJYA 发表于 2019-2-4 23:52:11

迷雾道长 发表于 2019-2-3 21:46
EOF是输入ctrl+z

谢谢
页: [1]
查看完整版本: 代码有错误么?