簡體   English   中英

printf 不工作(嘗試其他解決方案,仍然不工作)

[英]printf not working (tried other solutions, still doesn't work)

行。 所以基本上,我正在嘗試制作一個應用程序來檢查是否有一個包含所有數字 (0-9) 的數字可以被所有數字整除。 我正在使用 rand() function 來獲取數字組合,以防萬一。 這是我的代碼(仍然不完整,我只是想看看我的代碼是否運行正常):

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int randLessThanTen(int randNum);

int main()
{
    srand(time(0));
    int taken[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    int num = 0;
    for(int i = 0; i < 9; i++)
    {
        int randNum = rand();
        randLessThanTen(randNum);
        while(taken[randNum] == 1)
        {
            randNum = rand();
            randLessThanTen(randNum);
        }
        num+=randNum*(pow(10, i));
        taken[randNum] = 1;
    }
    //wtf
    printf("the number is %d/n", num);
    return 0;
}
int randLessThanTen(int randNum)
{
    while(randNum>9)
    {
        randNum = rand();
    }
    return randNum;
}

如上所述,printf() 語句不起作用。 並不是沒有打印數字,而是根本沒有打印任何東西,甚至連字符串都沒有。 我正在運行 Code::Blocks 20.03,也許這里有人可以幫助我?

taken的大小初始化為 10。
rand()可以產生比這更大的數字。
由於randLessThanTen()的返回值從未使用過,您正試圖訪問超出其 scope 的taken[]方式,這會導致您的程序在到達printf()之前崩潰。

此外,通過生成隨機數直到其中一個在您想要的范圍內的方法非常耗時。
我也傾向於modulo 10 ,就像user3386109建議的那樣:

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

int main()
{
    srand(time(0));
    int taken[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    int num = 0;
    for(int i = 0; i < 9; i++)
    {
        int randNum = rand() % 10;
        while(taken[randNum] == 1)
        {
            randNum = rand() % 10;
        }
        num+=randNum*(pow(10, i));
        taken[randNum] = 1;
    }
    printf("the number is %d\n", num);
    return 0;
}

您在 for 循環中調用 function RandlessThanTen 但您沒有將其返回值存儲在變量中。 所以嘗試在 for 循環中替換:

        RandNum = randlessThanTen(RandNum);
      

現在您的 RandNum 將受到您調用的 function 的影響。

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#include <time.h>

int randLessThanTen(int randNum);

int main() {
    srand(time(0));

    int taken[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 
    int num = 0;

    for (int i = 0; i < 9; i++) {   
        int randNum = rand();
        randNum = randLessThanTen(randNum);

        while(taken[randNum] == 1) {
            randNum = rand();
            randNum = randLessThanTen(randNum);
        }

        num += (int) randNum * (pow (10.0,(double) i));
        taken[randNum] = 1;
    }   
    //wtf
    printf("the number is %d\n", num);
    return 0;
}

int randLessThanTen(int randNum) {
   return (randNum) % 10; 
}

您需要從“randLessThanTen”function 獲取返回值,並為 pow() function 使用“#include<math.h>”。如果您了解指針,請嘗試在 function 中使用 pionter。

void randLessThanTen(int *randNum) {
    *randNum = *randNum % 10;
}

暫無
暫無

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

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