2015-04-01 7 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, стандартного устройства ввода)' читать строку –

+0

@MohitJain Я просто читал о строках в настоящее время, так Я бы не смог это сделать. – krazibiosvn

ответ

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; 

} 

Вы были приращение p указателя до состояния break. Таким образом, даже если *p содержит '\n', проверка делалась после увеличения местоположения указателя.

+0

спасибо за помощь! – krazibiosvn

Смежные вопросы