此代码必须获取坐标并将其写入coords
数组,还必须返回已输入的坐标数。
一旦用户输入0 0
,该代码必须停止,但是该代码不应保存它。
例如,如果我输入1 2 3 4 0 0
,则代码会将数组设置为(1,2) (3,4)
。
但是在这段代码中,当我输入0 0
时,它会向我显示错误,而当我首先输入数字时,打印结果只会显示零。
int coordinatesread(double coords[][DIM], int n)
{
double columnin, rowin;
int row=0;
while(row!=n-1)
{
scanf ("%lf",&columnin);
scanf ("%lf",&rowin);
if (columnin==0 && rowin==0)
{
return row+1;
}
else
{
coords[row][0]=columnin;
coords[row][1]=rowin;
++row;
}
printf("%.3lf %.3lf", coords[row][0], coords[row][1]); /* TEST */
}
return row+1;
}
最佳答案
问题在于,当您打印coords [row] [0]和coords [row] [1]时,您实际上是在向标准输出发送用户仍未输入的下一个坐标。您正在向stdout发送未定义的值,而不是您输入的值。 printf("%.3lf %.3lf", coords[row][0], coords[row][1]);
行应为printf("%.3lf %.3lf\n", coords[row-1][0], coords[row-1][1]);
并在\n
行旁添加下一行,否则打印的信息将不合法。
试试这个代码
#include <stdio.h>
#include <stdlib.h>
#define DIM 2
int coordinatesread(double coords[][DIM], int n)
{
double columnin, rowin;
int row=0;
while(row!=n-1)
{
scanf ("%lf",&columnin);
scanf ("%lf",&rowin);
if (columnin==0 && rowin==0)
{
return row+1;
}
else
{
coords[row][0]=columnin;
coords[row][1]=rowin;
row++;
}
printf("%.3lf %.3lf\n", coords[row-1][0], coords[row-1][1]); /* TEST */
}
return row+1;
}
int main(void)
{
double cords[5][2];
int n = 5;
coordinatesread(cords, n);
return 0;
}
关于c - C程序功能错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44595666/