2016-02-19 3 views
-1

Я не могу на всю жизнь понять, почему мой код не производит нужный мне результат. Требование состоит в том, чтобы не использовать какие-либо функции. Когда я ввожу строку текста, типа «текст», результирующий массив «tex» отрезает последнюю букву, которая не имеет для меня никакого смысла.Получение пользовательского ввода и сохранение его в массиве в C

#include <stdlib.h> 
#include <stdio.h> 
#include <ctype.h> 
#include <string.h> 

int read_input(char line_of_text[]) 
{ 
     int index = 0; 
     char ch; 
//  if(!line_of_text[0]) 
//    return index; 
     for(ch = getchar(); ch != '\n' && ch != '\0'; ch = getchar()){ 
       if(ch == EOF){ //clear string and return EOF 
         line_of_text[0] = '\0'; 
         return EOF; 
       } 
       line_of_text[index++] = ch; 

     } 
     line_of_text[++index] = '\0'; 
     return index; 
} 
+1

'символ ч;' -> 'INT CH = 0; '' –

+1

line_of_text [++ индекс] = '\ 0'; '->' line_of_text [index] = '\ 0 '; ' – jiveturkey

+1

Почему вы очищаете строку при достижении EOF? –

ответ

1

после применения всех комментариев и очистки логика

Обратите внимание, как вертикальное и горизонтальное расстояние сделать код намного легче читать/понимать

Обратите внимание на заявления, не используйте «сторону эффекты обрабатывать приращение 'индекса' переменной

int read_input(int max_chars, char line_of_text[]) 
{ 
    int index = 0; 
    int ch = 0; // getchar() returns an int, not a char 

    // Note: initialization of 'index' handled in declaration 
    // Note: '-1' to leave room for NUL termination char 
    for(; index < (max_chars-1); index++) 
    { 
     ch = getchar(); 

     // Note: place literal on left so compiler can catch `=` error 
     if(EOF == ch || '\n' == ch || '\0' == ch) 
     { 
      break; 
     } 

     // acceptable char so place into buffer 
     line_of_text[index] = ch; 
    } 

    // when done, terminate the char string 
    line_of_text[index] = '\0'; 

    return index; 
} // end function: read_input 
+0

Спасибо. Я думаю, что это был символ, а не int, который был беспорядочным! –