请问这个程序哪里出错了?

yhm2046 2011-08-19 05:33:00
/*  HELLO.C -- Hello, world */

#include "stdio.h"
#include "conio.h"
#define N 3

int getNum(int a[],int b[]);
int main()
{
int a[N],b[N];
getNum(a,b);
getch();
return 0;
}

int getNum(int a[],int b[])
{
int i=0;
printf("请输入坐标:\n");
do
{
scanf("%d %d",&a[i],&b[i]);
i++;
}
while(a[i]==0&&b[i]==0);
for(i=0;i<N;i++)
{
printf("%d %d\n",a[i],b[i]);
}

return 0;
}
...全文
146 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jernymy 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yhm2046 的回复:]
感谢各位,我用for循环解决了

C/C++ code

#include <stdio.h>
#include <conio.h>
#define N 3

void getNum(int a[],int b[]);
int main()
{
int a[N],b[N];
getNum(a,b);
getch();
return 0;
……
[/Quote]
恭喜
yhm2046 2011-08-19
  • 打赏
  • 举报
回复
感谢各位,我用for循环解决了
#include <stdio.h>
#include <conio.h>
#define N 3

void getNum(int a[],int b[]);
int main()
{
int a[N],b[N];
getNum(a,b);
getch();
return 0;
}

void getNum(int a[],int b[])
{
int j,i=0;
printf("请输入坐标:\n");
for(;i<N;i++)
{ scanf("%d %d",&a[i],&b[i]);
if(a[i]==0&&b[i]==0)break;
}
for(j=0;j<i;j++)
{
printf("%d %d\n",a[j],b[j]);
}

/* return 0; */
}
cNETLOOK 2011-08-19
  • 打赏
  • 举报
回复
#include "stdio.h"
#define N 3
void getNum(int a[],int b[]);
int main()
{
int a[N],b[N];
getNum(a,b);//这里用不到getNum函数的返回值所以上面声明时用void 声明
getchar();
return 0;
}
void getNum(int a[],int b[])
{
int i = -1;
printf("请输入坐标:\n");
do {
i++;
scanf("%d %d",&a[i],&b[i]);
}while(a[i] != 0 && b[i]!= 0 && i < (N-1) );
/*这里如果读到两个输入都是0,或循环了n-1次就退出(因为i开始设置为-1如果不是n-1则数组越界)*/

for(i = 0; i < N; i++)
{
printf("%d %d\n",a[i],b[i]);
}
// return 0;
}
tianmo2010 2011-08-19
  • 打赏
  • 举报
回复
/* HELLO.C -- Hello, world */

#include "stdio.h"
#include "conio.h"
#define N 3

int getNum(int a[],int b[]);
int main()
{
int a[N],b[N];
getNum(a,b);
getch();
return 0;
}

int getNum(int a[],int b[])
{
int i=-1;//确保脚标从0开始
printf("请输入坐标:\n");
do
{
i++;
scanf("%d %d",&a[i],&b[i]);
}
while(a[i]==0&&b[i]==0 && i < N);//防止数组越界
for(i=0;i<N;i++)
{
printf("%d %d\n",a[i],b[i]);
}

return 0;
}
tianmo2010 2011-08-19
  • 打赏
  • 举报
回复
/*  HELLO.C -- Hello, world */

#include "stdio.h"
#include "conio.h"
#define N 3

int getNum(int a[],int b[]);
int main()
{
int a[N],b[N];
getNum(a,b);
getch();
return 0;
}

int getNum(int a[],int b[])
{
int i=-1;//确保脚标从0开始
printf("请输入坐标:\n");
do
{
i++;
scanf("%d %d",&a[i],&b[i]);
}
while(a[i]==0&&b[i]==0 && i < N);//防止数组越界
for(i=0;i<N;i++)
{
printf("%d %d\n",a[i],b[i]);
}

return 0;
}
Woodpecker 2011-08-19
  • 打赏
  • 举报
回复
而且楼主没考虑越界问题...
Woodpecker 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tianmo2010 的回复:]

do
{
scanf("%d %d",&a[i],&b[i]);
i++;
}
while(a[i]==0&&b[i]==0);
红色的两行交换顺序。
[/Quote] 换了顺序就从数组的第二个开始了..应该设个变量 比如int t =i++; 然后再a[t] b[t].......
yuqangy 2011-08-19
  • 打赏
  • 举报
回复
do
{
scanf("%d %d",&a[i],&b[i]);
i++;
}
while(a[i]==0&&b[i]==0);

你不怕a和b越界?
tianmo2010 2011-08-19
  • 打赏
  • 举报
回复
do
{
scanf("%d %d",&a[i],&b[i]);
i++;
}
while(a[i]==0&&b[i]==0);
红色的两行交换顺序。
tianmo2010 2011-08-19
  • 打赏
  • 举报
回复
do
{
scanf("%d %d",&a[i],&b[i]); i++; }
while(a[i]==0&&b[i]==0);


红色的两行交换顺序。
hfqsj19871114 2011-08-19
  • 打赏
  • 举报
回复
1:
#include "stdio.h"
#include "conio.h"
头文件要这样包含:
#include <stdio.h>
#include <conio.h>
2:
这个条件要看输入者如何数,如果3次条件不满足,就会造成数组越界,我们定义的数组是3
tianmo2010 2011-08-19
  • 打赏
  • 举报
回复
按照LZ的思想,应该改为这样子:

do
{
i++;
scanf("%d %d",&a[i],&b[i]);
}
while(a[i]==0&&b[i]==0);
小雨好赖床 2011-08-19
  • 打赏
  • 举报
回复
do
{
scanf("%d %d",&a[i],&b[i]);
i++;
}
while(a[i]==0&&b[i]==0);

你实际的目的是想当 a[i] 与 b[i]都为0的时候跳出循环吧?
第一,此时的a[i]不是你输入的时候的a[i],因为a[i]中 i++了,是指向数组中下一个位置
第二,你得循环条件是,当a[i] 与 b[i]都==0的时候才会继续循环
根据这两点调整一下你的程序吧
c_losed 2011-08-19
  • 打赏
  • 举报
回复

do
{
scanf("%d %d",&a[i],&b[i]);

i++;
}
while(i<N);//这里

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧