簡體   English   中英

變量值未分配給 C 中的另一個變量

[英]Variable value not being assigned to another variable in C

我目前正在服用 class 來學習 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;
}

看來您在使用變量 scope 的概念時遇到了困難。

在這段代碼中

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

placeHolder1只會在函數執行期間存在。 一旦執行離開此 function,placeHolder1 將 go 超出 scope 並有效地消失。

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

#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;
}

注意:錯誤在工作代碼之后被注釋。

簡要閱讀變量作用域,了解何時以及如何在需要時聲明函數和變量。

糾正愚蠢的錯誤后,您將擺脫不正確的 output:

Number: 12
12

此外,這沒有任何意義: long checksum(num)聲明。 根據變量 scope 的規則,您正在使用 function 未知的num + 如果它是struct或數據類型,則它必須具有變量名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM