2015-04-01 91 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