代码有错误么?
题目描述:已知鸡和兔的总数量
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;
} 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;
}
迷雾道长 发表于 2019-1-29 19:35
EOF的判断条件是while(scanf("%d%d",&n,&m)!=EOF),下面是我写的代码,你看看能不能看懂
#include
int ...
在输入两个-1后无法跳出循环 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;
} sunrise085 发表于 2019-2-1 10:55
你对scanf函数有误解,scanf函数的返回值是正确读取参数个数,你输入两个-1,scanf能够读取到两个%d, ...
谢谢,但是我想问一下EOF不是-1吗?所以结束条件不应该是输入-1吗? NYJYA 发表于 2019-1-29 21:19
在输入两个-1后无法跳出循环
你想要在输入那里实现那个EOF就输入ctrl+z就是实现不输入的情况,也就是题目的那种情况 NYJYA 发表于 2019-2-2 20:11
谢谢,但是我想问一下EOF不是-1吗?所以结束条件不应该是输入-1吗?
EOF是输入ctrl+z 迷雾道长 发表于 2019-2-3 21:46
EOF是输入ctrl+z
谢谢
页:
[1]