2016-03-10 229 views
-2

嗨,我對編碼非常陌生。所以我在標題中提到了我的老師的這項任務。這是我到目前爲止有:使用c中的函數以相反的順序打印數字

#include <stdio.h> 

void main() { 
    int n; 
    printf("Enter n: "); 
    scanf("%d", &n); 
    printf("%d in reverse order is ", n); 
    printf("%d", reverse(n)); 
} 

int reverse(int n) { 
    int r; 

    do { 
     r = n % 10; 
     printf("%d", r); 
     n = n/10; 
    } while (n > 0); 
} 

問題是,當我輸入一個數字,它被印在了相反的順序但到底0。例如,如果我給12,它會給出210作爲輸出。我無法弄清楚問題是什麼,所以任何幫助表示讚賞。問候。

+5

請得到一本更好的指導書。 ['void main'錯誤](http://c-faq.com/ansi/voidmainbooks.html)。 –

+0

@Am_I_Helpful有更多的問題,程序是未定義的,因爲它聲明瞭返回的值,但實際上並沒有返回任何東西 – 4pie0

+1

如果你的老師讓你寫'void main',你應該把它們引用到上面鏈接的頁面上。 –

回答

0

程序有未定義的行爲。

這是因爲你試圖打印返回值reverse()函數,它被聲明爲int,但你的函數什麼也沒有返回。

修正此問題,然後僅在函數reverse()中打印值,並且可選地單獨返回reverse()函數的值。

int 
reverse (int n) 
{ 
    int r; 

    do 
    { 
     r = n % 10; 
     printf("%d", r); 
     n = n/10; 
    } while(n > 0); 
    return 0; 
} 

printf("%d in reverse order is ", n); 
reverse(n); 

請注意:當你想到這個功能將不打印負整數位的方式,因爲餘運算符%的結果是相同的符號分紅的,所以在案件-12 you will print -2 。

+0

注意:'n <= -10'時有點麻煩。有可能OP不關心。 – chux

+1

@chux OP顯然呈現正整數 – 4pie0

2

您沒有編譯啓用了警告的程序,這就是爲什麼它有未定義的行爲。始終啓用警告和警告設置錯誤編譯:

% gcc test.c -Wall -Werror 
test.c:3:6: error: return type of ‘main’ is not ‘int’ [-Werror=main] 
void main() { 
    ^
test.c: In function ‘main’: 
test.c:8:18: error: implicit declaration of function ‘reverse’ 
    [-Werror=implicit-function-declaration] 
    printf("%d", reverse(n)); 
       ^
test.c: In function ‘reverse’: 
test.c:19:1: error: control reaches end of non-void function [-Werror=return-type] 
} 
^ 
cc1: all warnings being treated as errors 

爲什麼你看到0末從int reverse()未定義返回值被打印出來。

由於不是從被聲明爲返回int函數返回值是不確定的行爲,輸出可能也已經21-32598778923421[2] 31941 segmentation fault (core dumped) ./a.out

你的程序需要3個修正:

  1. main返回int
  2. 使reverse回報void,並事先聲明。
  3. 請勿嘗試printf反向返回值。

因此我們得到

#include <stdio.h> 

void reverse(int); 
int main() { 
    int n; 
    printf("Enter n: "); 
    scanf("%d", &n); 
    printf("%d in reverse order is ", n); 
    reverse(n); 
    printf("\n"); 
} 

void reverse (int n) { 
    int r; 
    do { 
     r = n % 10; 
     printf("%d", r); 
     n = n/10; 
    } while(n > 0); 
} 

如果你不是想返回,如果你扭轉n數字,你得到的數字,那麼你可能不應該在reverse打印任何東西。

相關問題