c - 如何定义一个函数,该函数接受用户的输入并将其存储到程序中进一步使用的变量中?

标签 c function cs50

我正在编写以下代码,但是当我给出输入并尝试执行时,即使 true 的条件成立,结果也始终根据 FALSE 情况。 例如:如果我输入 h=2,则它遵循错误情况,如果我输入 h=34,则它也遵循错误情况。 请告诉我我所犯的错误。

#include <cs50.h>
#include <stdio.h>
#include <stdlib.h>
int input(int a);
void pyramid(void);
int h;
int main(void) {
  input(h);
  if(h>0 && h<9) {
       pyramid();
    }
  else {
       do {
          input(h);
       } while(h>8 || h<1);
       pyramid();
  }
}

void pyramid(void) {
  printf("sfsdfsf");
}   

int input(int a) {
  printf("Height: ");
  scanf("%d", &a);
  return(a);
}

最佳答案

问题是当您调用input时:input(h);h 按值(或通过副本)传递,这意味着无论函数中发生什么,h 都看不到任何内容。因此:

要么使用函数的返回值:

h = input(h);

在这种情况下,向函数传递值有点奇怪...... 因此,首选的技巧可能是:

h = input();

int input() {
  int a;
  printf("Height: ");
  scanf("%d", &a);
  return a;
}

这更清楚地表达了这样一个事实:您调用一个函数,该函数使某些东西返回您一个值(这个函数真正所做的事情在调用点并不有趣)。

或者传递变量的地址:

input(&h);

void input(int *a) {
  printf("Height: ");
  scanf("%d", a);
}

这表明该函数获取它将修改的变量的地址。

假设你想把 friend 的电话号码写到纸上,有两种解决方案:

  1. 让他将其写在他拥有的纸上,并将纸作为返回给您。
  2. 让他把它写在你给他的纸上。

关于c - 如何定义一个函数,该函数接受用户的输入并将其存储到程序中进一步使用的变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59335294/

相关文章:

c - 使用函数和 for 循环的 float 组

c - 从函数传递结构数组

c - IOBlockStorageDevice 和 blockSizes,避免规范限制

C 调用 ASM (YASM x86)

c - MPI Irecv 无法正确接收缓冲区的第一个元素?

c - 根据输入执行一段代码

C - 存储到空指针错误,段错误

使用字符串数组调用整数的 1's, 10' s, 100's... 列

c - 如何使用动态内存分配对矩阵执行不同的操作?

c - getc() 是在返回 EOF 后定义的吗?