【问题标题】:Variable value not being assigned to another variable in C变量值未分配给C中的另一个变量
【发布时间】:2020-06-11 01:35:36
【问题描述】:

我目前正在上课学习 C。我已经获得了将用户输入的值设置为 num 的代码,但是当我尝试为另一个变量(placeHolder1)分配 num 的值并返回该新变量时,我得到了一堆随机数。不完全确定为什么新变量没有收到 num 持有的内容。在我的原始帖子中,我遗漏了很多代码,因为我不知道我是否能够全部分享。是的,这是一个 CS50 问题,不,我不是要求解决问题集,只是要求变量的指定问题。其中很多都被注释掉了,因为我试图找出为什么我得到的值与预期不同。

#include <stdio.h>
#include <cs50.h>
#include <math.h>

string cardType;
long get_card_num(string prompt);
long length;
long tempNumL;
long tempNumS;
int startNum;
long sum1;
long sum2;


int main(void)
{
        long n = get_card_num("Number: ");      //prompts user for input
        printf("%li\n",n);
}

long checksum(num)
{
    long placeHolderA=num;
    long placeHolderB=num/10;

    /*do
    {
        sum1+=(placeHolder1%10);
        placeHolder1=placeHolder1/100;
    }
    while(placeHolder1/100>1);

    do
    {
        sum2+=(placeHolder2%10);
        placeHolder2= placeHolder2/100;
    }
    while(placeHolder1/100>0);
    */
    return num;
}

long get_card_num(string prompt)
{
    long num;

            num = get_long("%s", prompt);           //assigns num to the value of what user input

        tempNumL=num; // used to get length
        tempNumS=num; // used to get starting num

    do
    {
        tempNumL = tempNumL/10;                 //gets length
        length++;
    }
    while(tempNumL>0);

    if(length<13)
    {
        get_card_num(prompt);
    }


    checksum(num);




    /*
    if((length==13 || length==16) && startNum==4)
    {
    }

    if(length==15)
    {
    }

    if(length==16 && startNum!=4)
    {
    }
    else
    {
        printf("INVALID");
    }
*/
return num;
}

【问题讨论】:

  • placeHolder1get_num 中定义在哪里?那不可能是你的实际代码,如果是,它就不可能编译。
  • long checksum(num) 是什么?你对它有什么期待?
  • 这段代码真的可以编译吗?如果没有,请使用完整的可重现示例进行更新。
  • 这是一个 cs50 问题吗?
  • 我更新了问题@M.M

标签: c variables cs50


【解决方案1】:

您似乎对一个名为变量范围的概念有困难。

在这段代码中

long checksum(num)
{
    long placeHolder1 = num;
}

placeHolder1 只会在函数执行期间存在。一旦执行离开此函数,placeHolder1 将超出范围并有效地消失。

【讨论】:

    【解决方案2】:

    您可能需要执行以下操作:

    #include <stdio.h>
    
    long checksum(long num) // it's in top because it's used after its declaration
    {
        return num;
    }
    
    long get_num(char prompt[]) // 'string' is a concept of C++
    {
        long num;
    
        printf("%s", prompt);
        scanf("%ld", &num); // assigns num to the value of what user input
                            // use %ld for 'long int'
    
        long placeHolder1 = checksum(num); // placeHolder1 wasn't declared here
    
        return placeHolder1;
    }
    
    int main(void)
    {
        long n = get_num("Number: "); // prompts user for input
        printf("%ld\n", n);
    
        return 0;
    }
    

    注意:错误在工作代码之后被注释。

    Read about Variable Scopes in brief 知道我们应该何时以及如何在需要时声明函数和变量。

    纠正愚蠢的错误后,您将摆脱不正确的输出:

    Number: 12
    12
    

    此外,这没有任何意义:long checksum(num) 声明。根据变量范围的规则,您正在使用函数未知的num + 如果它是struct 或数据类型,则它必须具有变量名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多