2016-05-29 72 views
-2

我想從我在鍵盤中引入的數組中提取數字並將其轉換爲一個整數。我的代碼是:從數組和程序中提取整數值而不顯示printf函數

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int main(void) 
{ 
    int r, t, i; 
    char expressio[t]; 
    char vector[50]; 
    char rpn[t][4]; 

    printf("Introduce the expresssion"); 
    fgets(expressio, t, stdin); 

    t = strlen(expressio); 

    for (i = 0; i <= t; i++) { 
     if (isdigit(expressio[i])) { 
      r = atoi(expressio[i]); 
      vector[i] = rpn[0][r]; 
     } 
     return 0; 
    } 
} 

我有這樣的警告:

過客 '的atoi' 的參數1,使指針從整數沒有投

我該如何解決呢?

另外,當我執行這個程序時,它什麼也不做,它甚至不打印「引入表達式」。這是爲什麼發生?

+0

請啓用編譯器警告並處理它們,就好像錯誤! 't'未定義。請查看'atoi'的手冊頁。 –

+0

嘗試使用'-Wall -O2'參數構建代碼,它會向您顯示更多4條警告,您應該在開始思考爲什麼代碼無法正常工作之前應該修復這些警告。至於'atoi()'警告 - 看看[man atoi](http://linux.die.net/man/3/atoi):它希望你提供一個**指針**給'const char' (即字符串),但是你用'char'來代替它。 –

+0

看着循環,你不小心把它的回報,從而退出你的程序。而你沒有看到「引入表達式」的原因是因爲c中的輸出存儲在一個名爲stdout的FILE中,它只在刷新時更新,stdout通常用換行刷新或在程序退出時刷新。嘗試添加\ n來引入表達式,以便在運行時查看它,而不是在程序結束後查看 –

回答

0

該警告意味着您正在向函數傳遞錯誤的參數。 「的atoi」期待字符作爲參數數組,但你在這裏傳遞一個單個字符作爲參數:

r = atoi(expressio[i]); 

如果您想將單個字符轉換成一個數字,你可以這樣做:

r = expressio[i] - '0'; 

如果你看看ascii表,你會注意到ascii值爲0的是48.如果你減去char表達式[i]中的48(或者像我那樣,ascii值爲0),你會以整數形式獲取相應的數字。像這樣,如果expressio [i]等於'8',那麼r將等於8.