@Borizzz

Как вывести результат этой функции?

В примере книги была дана такая функция, но я не совсем понимаю, как она может что-то вывести, если while бесконечно будет принимать текст и не закончится?
Подскажите, когда принтф сработает или как правильней записать подобную функцию?
#include <stdio.h>

int main(void) {
	int c, digic, tabs, space, next;
	while((c = getchar()) != EOF) {
		switch(c) {
			case '0' : case '1' : case '2' : case '3' : case '4' : case '5' :
			case '6' : case '7' : case '8' : case '9' : digic++;
			break;
			case ' ' : space++;
			break;
			case '\t' : tabs++;
			break;
			default : next++;
		}
	}
	printf("digic %d\n space %d\n tabs %d\n next %d\n", digic, space, tabs, next);
	return 0;
}


И помогите со 2-ой функцией, если не трудно.
Почему ругается на массивы?
#include <stdio.h>

int ch() {
	int c, int r[], int s[];
	int i = 0;
	while((c = getchar()) != '\n') {
		s[i] = c;
		i++;
	}
	for(int j = 0; j < i; j++) {
		if(s[i] == '\t') r[j] = "\\t";
		else r[j] = s[i];
	}
	printf("result %d\n", r[]);
}

int main(void) {
	ch();
	return 0;
}
  • Вопрос задан
  • 196 просмотров
Решения вопроса 2
@Mercury13
Программист на «си с крестами» и не только
EOF — это маркер «файл закончился, данных больше нет». Обычно getchar даёт цифры от 0 до 255, а EOF — значение вне этих пределов (вообще-то −1).
Консоль никогда не кончается, но конец файла можно сделать, нажав Ctrl+Z.

Правильно писать int c; int r[]; int s[]; или int c, r[], s[];. Но в любом случае перед нами статический массив и ему надо дать размер.

Иногда бывают массивы без размера — когда мы не заводим память, а просто говорим: «перед нами какой-то отрезок памяти». Например.
void doSmth(int a[]) {}  // передаём в функцию отрезок памяти неизвестной длины
int x[5];
doSmth(x);

extern int b[];  // компилятор рассматривает b как отрезок памяти неизвестной длины.
int b[5];    // …и только линкер подставит на место b настоящий массив

В Java массивы не статические и им размер дают тогда, когда выделяют им память.
int[] x = new int[5];    // повторяю, это не Си++, а Java!

Но это уже офтоп.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы