此代码必须获取坐标并将其写入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/

10-12 13:59