2014-02-14 27 views
0

我具有以下的C程序:指針服用輸入無限

#include <stdio.h> 

int main() 
{ 
    char p[12], i; 

    for(i=0; i<12; i++) 
    { 
     scanf("%d", p+i); 
    } 

    for(i=0; i<12; i++) 
    { 
     printf("%d", *(p+i)); 
    } 

    return 0; 
} 

此代碼正在輸入無限。這有什麼不對?

+0

真的嗎?在這裏工作很好。但編譯器警告'警告:格式%d需要int *類型的參數,但參數2的類型爲char *'。 – Jeyaram

+0

它在我的編譯器中工作正常。你使用哪種編譯器? – const

+0

我正在使用Codeblocks。 –

回答

0

你搞亂了intchar(格式說明符%d是用於整數,而不是字符)。有關不同類型的格式說明符的更多信息,請參閱here

如果你想讀取用戶整數,則需要更改您的代碼:

#include <stdio.h> 

int main() 
{ 
    int p[12], i; 

    for(i=0; i<12; i++) 
    { 
     scanf("%d", &p[i]); 
    } 

    for(i=0; i<12; i++) 
    { 
     printf("%d", *(p+i)); // or better to use p[i] here 
    } 

    return 0; 
} 
0

計數器被聲明爲代碼中的字符。這會在執行for循環時導致邏輯錯誤。

所以decare變量i如下,

int i; 

也改變了格式說明%c妥善處理輸入。