#include <stdio.h>
#include <stdlib.h>
int main() {
char c; /* 1. */
int count;
char arr[50];
c = getchar(); /* 2. */
count = 0;
while (c != EOF) { /* 3. and 6. and ... */
arr[count] = c; /* 4. */
++count; /* 5. */
}
return (EXIT_SUCCESS); /* 7. */
}
c
должно быть int. getchar () возвращает int, чтобы различать действительный символ и EOF
- Прочитать символ
- Сравните этот символ с EOF: если отличается, перейдите к 7
- Поместите этот символ в массив
arr
, элемент count
- Подготовка к добавлению «другого» символа в следующий элемент массива
- Проверьте символ, прочитанный в 1. для EOF
Вам нужно каждый раз читать разные символы в цикле. (3., 4., 5.)
И вы не можете поместить в массив больше символов, чем зарезервировано. (4.) * * Тысяча двадцать-одна
Попробуйте это:
#include <stdio.h>
#include <stdlib.h>
int main() {
int c; /* int */
int count;
char arr[50];
c = getchar();
count = 0;
while ((count < 50) && (c != EOF)) { /* don't go over the array size! */
arr[count] = c;
++count;
c = getchar(); /* get *another* character */
}
return (EXIT_SUCCESS);
}
Редактировать
После того, как у вас есть символы в массиве, вы захотите что-то с ними сделать, верно? Поэтому, прежде чем программа завершится, добавьте еще один цикл для их печати:
/* while (...) { ... } */
/* arr now has `count` characters, starting at arr[0] and ending at arr[count-1] */
/* let's print them ... */
/* we need a variable to know when we're at the end of the array. */
/* I'll reuse `c` now */
for (c=0; c<count; c++) {
putchar(c);
}
putchar('\n'); /* make sure there's a newline at the end */
return EXIT_SUCCESS; /* return does not need () */
Обратите внимание, что я не использовал строковую функцию printf (). И я не использовал его, потому что arr
не является строкой: это простой массив символов, который не (обязательно) имеет 0 (NUL). Только символьные массивы с NUL в них являются строками.
Чтобы поместить NUL в arr, вместо ограничения цикла до 50 символов, ограничьте его 49 (сохраните один пробел для NUL) и добавьте NUL в конце. После цикла добавьте
arr[count] = 0;