2015-01-10 2 views
-1
#include <stdio.h> 
#include <limits.h> 

int main() { 

    enum loop {NO ,YES}; 
    enum loop okloop = YES; 
    int i=0; 

    char s[8]; 
    int lim=6; 
    char c; 

    while (okloop==YES) 
    { 
     if (i>=lim-1) 
      okloop=NO; 
     else if ((c=getchar())!='\n') 
      okloop=NO; 
     else if (c==EOF) 
      okloop=NO; 
     else { 
      s[i]=c; 
      ++i; 
     } 
    } 
    for (i=0;i<5;++i) 
     printf("this is the character %c\n",s[i]); 
    return 0; 
} 

Я просто вводил символ с клавиатуры и хранил его в массиве; а затем я должен напечатать символ, хранящийся в массиве, на экране, но результат не такой, как я ожидал.Программа не дает ожидаемого результата

+4

Правильно укажите свой код. В его нынешнем виде это невозможно прочитать. – alk

+7

... и чего вы ожидаете - котят? –

+1

Подсказка: 'getchar()' возвращает 'int', а не' char'. – alk

ответ

3

По моему разумению, вам необходимо изменить

else if ((c=getchar())!='\n') 

в

else if ((c=getchar()) == '\n') 

В противном случае, вы в конечном итоге не хранить НИЧТО действительный в s[i].

Кроме того, как заметка на полях

  1. всегда инициализировать локальные переменные.
  2. Добавить return 0; в ваш main().
  3. думаю о завершении s[i] после считывания входов, на всякий случай, если вы хотите использовать его как строку позже.

Хорошая практика.

+0

Здесь '0'-term здесь не требуется, так как' char'-array рассматривается как простой 'char'-array, а не как C-" string ". – alk

+0

@alk Абсолютно сэр, как ссылка для будущего использования. Обновлял мой ответ. :-) –

+0

Спасибо saurav ghosh – shubhamm

3

Почему вы не можете просто сделать:

while((c = getchar()) != '\n' && i<lim-1) 
    s[i++]=c; 

Ваш код излишне использует много переменных, которые могут быть устранены с помощью вышеуказанного цикла.


[сложение алка]

Более читаемого версия:

size_t i = 0; 
int c = EOF; 

... 

while (
    ('\n' != (c = getchar())) && 
    (i < lim) 
) 
{ 
    s[i] = c; 
    ++i; 
} 

Просто крошечные изменения делают вещи лучше читаемыми, легче понять, менее подвержены ошибкам, более стабильный.

Менее элегантный, но еще более очевидное решение:

size_t i = 0; 

... 

while (i < lim) 
{ 
    int c = getchar(); 
    if ('\n' == c) 
    { 
    break; 
    } 

    s[i] = c; 
    ++i; 
} 
+2

Несмотря на то, что ваш код "* излишне *" не соответствует действительности. Самое сжатое решение не обязательно должно быть «лучшим». – alk

+0

Вы хотите, чтобы я коснулся вашего ответа? – alk

+0

См. Мои обновления к вашему ответу. ;-) – alk

0

Это все, что вам нужно сделать:

#include <stdio.h> 

int main() 
{ 
    int i=0, j; 
    char s[8]; 
    char c; 

    while (i < 8) 
    { 
    c = getchar(); 
    if (c == EOF) 
     break; 
    else if (c != '\n') 
     s[i++]=c; 
    } 

    for (j = 0; j < i; ++j) 
    printf("this is the character %c\n",s[j]); 

    return 0; 
} 

Loop через пользовательский ввод (8 characters max). Когда пользователь вводит EOF (Ctrl + D), выйдет while loop и любые символы, введенные до этой точки, будут напечатаны как выходные данные. Если в качестве входных данных задано значение \n, оно будет игнорироваться/не сохранено в массиве.

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