2015-04-01 92 views
0

我被困在一個無限循環中,出於某種原因,當輸入\n時程序不會終止。此外,代碼的重點是反轉輸入,但我試圖使用指針而不是整數來跟蹤數組中的位置。代碼錯誤? [C]

#define MSG_LENGTH 80 

int main(void) 
{ 
    char msg[MSG_LENGTH], *p; 

    printf("Enter a message: "); 

    for (p = msg; p < &msg[MSG_LENGTH];) 
    { 
     *p++ = getchar(); 

     if (*p == '\n') 
      break; 
    } 

    printf("Reversal is: "); 

    for (p--; p >= msg;) 
     putchar(*p--); 

    return 0; 

} 
+0

你爲什麼不乾脆用'與fgets(NSG,MSG_LENGTH,標準輸入)'讀取字符串 – 2015-04-01 07:46:02

+0

@MohitJain我只是閱讀有關字符串現在,讓我本來無法做到這一點。 – krazibiosvn 2015-04-01 07:52:57

回答

2
for (p = msg; p < &msg[MSG_LENGTH];) 
{ 
    *p++ = getchar(); <-- Getting character in *p and incrementing p 

    if (*p == '\n') <-- Checking value of next character, not the one just read 
     break; 
} 

可能的修正:

for (p = msg; p < &msg[MSG_LENGTH]; p+=sizeof(char)) 
{ 
    *p = getchar(); 

    if (*p == '\n') 
     break; 
} 
3

試試這個:

#define MSG_LENGTH 80 

int main(void) 
{ 
    char msg[MSG_LENGTH], *p; 

    printf("Enter a message: "); 

    for (p = msg; p < &msg[MSG_LENGTH];) 
    { 
     *p = getchar(); 
     if (*p == '\n') 
      break; 
     p++; 
    } 

    printf("Reversal is: "); 

    for (p--; p >= msg;) 
     putchar(*p--); 

    return 0; 

} 

你是break條件之前遞增p指針。因此,即使*p包含'\n',也會在增加指針位置之後進行檢查。

+0

感謝您的幫助! – krazibiosvn 2015-04-01 07:53:41