【问题标题】:How to do this program in C? Part 3.0如何在 C 中执行此程序?第 3.0 部分
【发布时间】:2013-10-14 01:06:56
【问题描述】:

编写一个名为 readRect() 的函数,它使用 scanf() 来读取定义 矩形的位置。这些值是按 xmin、ymin、xmax、ymax 顺序排列的整数。您的 函数应该通过引用传递参数以返回这四个整数值。此外,您的功能是返回一个整数,它是成功扫描的值的数量,因此用户可以键入诸如 eod 之类的非数字项来指示没有数据(即,使用返回类型来返回此值)。 我不明白我应该如何创建函数 readRect() 以便它通过引用传递参数

int readRect (int w, int x, int y, int z){
     return scanf("%d%d%d%d\n",&w,&x,&y,&z);
}



int main (void){
    int a,b,c,d;
    printf(">>enter two rectangles:\n");
    readRect(a,b,c,d);

    return EXIT_SUCCESS;
}

【问题讨论】:

    标签: c pass-by-reference scanf


    【解决方案1】:

    改写成

    int readRect (int *w, int *x, int *y, int *z)  
    {
          return scanf("%d%d%d%d",w,x,y,z);  
    }  
    

    并从manin 调用它

    readRect(&a, &b, &c, &d);
    

    请注意,在 C 中,所有调用都是按值而不是按引用

    【讨论】:

    • 当我只在 main 中使用 readRect() 一次时,为什么它会在终止前扫描 8 个值?
    • @user2805620;移动\n 来自scanf
    • 你能告诉我为什么吗?我不只是想知道你这样做是为了让它不扫描。
    【解决方案2】:

    您需要通过地址传递参数,也就是指针。因此,函数头将是:

    int readRect ( int * w, int * x, int * y, int * z )
    

    来自main的电话将是

    readRect ( &a, &b, &c, &d );
    

    【讨论】:

      猜你喜欢
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-29
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      相关资源
      最近更新 更多