Поместите char в массив, используя указатель в c - PullRequest
0 голосов
/ 14 апреля 2020

У меня проблема, они дали мне задание. Они сказали нам, что мы должны использовать указатель, чтобы поместить значение с клавиатуры в массив, а затем распечатать этот массив.

Я пытаюсь создать это, но я не знаю, почему это неправильно. Я определяю свой массив, затем получаю значение и помещаю это значение в массив.

#include <stdio.h>
#include <stdlib.h>
#define N 10000 // Maximum array size


int main ()
{
    char keyboardArray[N];    
    char *r;            
    r = keyboardArray;
    while( (*r++ = getchar()) != EOF );
    printf("You write %s", r);

    return 0;
}

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020

У вас есть несколько проблем:

  1. В конце l oop, r указывает на конец строки, а не на начало. Таким образом, печать r не напечатает введенную строку. Вы должны напечатать keyboardArray вместо r.
  2. Вы никогда не добавляете нулевой терминатор в строку, поэтому вы не можете использовать оператор формата %s.
  3. getchar() возвращает int, а не char - это необходимо, чтобы можно было отличить guish EOF от обычных символов. Поэтому вам нужно прочитать в другую переменную перед сохранением в массиве.
int main ()
{
    char keyboardArray[N];    
    char *r;    
    int c;        
    r = keyboardArray;
    while( (c = getchar()) != EOF ) {
        *r++ = c;
    }
    *r = '\0'; // Add null terminator
    printf("You write %s\n", keyboardArray);
}

Обратите внимание, что это будет считываться до EOF, поэтому пользователь должен будет ввести специальный символ, такой как Control -d (on Unix) или Control-z (on Windows) для завершения ввода. Вы также можете проверить наличие новой строки, чтобы они могли ввести одну строку:

while ((c = getchar()) != EOF && c != '\n') {
1 голос
/ 14 апреля 2020

Я думаю, что в любом случае вам нужна промежуточная переменная, которая будет принимать символ чтения.

Также вам нужно добавить введенную последовательность символов с завершающим нулем.

Например,

#include <stdio.h>

#define N 10000 // Maximum array size

int main( void )
{
    char keyboardArray[N];    
    char *r = keyboardArray;

    for ( int c; 
          r + 1 < keyboardArray + N && ( c = getchar() ) != EOF && c != '\n';
          ++r )
    {
        *r = c;
    }

    *r = '\0';

    printf( "You write %s\n", keyboardArray );
}
...