@ZedRott

Как использовать функцию scanf (C)?

Вот код Си:
#include <stdio.h>

int main(void) {
	int i;
	int n;
	scanf("%d", &n);
	const int d = n;
}


Суть задачи в данный момент: сформировать массив размерности n, вводимой с клавиатуры.

Проблема в том, что после того, как я использую функцию scanf(), компилятор не хочет создавать ни констант, ни переменных, ни массивов (пишет parse error). Зато функцию printf() и циклы принимает без проблем.

Виноват компилятор (использую C++Free) или я неправильно функцию ввода применяю?
  • Вопрос задан
  • 2730 просмотров
Решения вопроса 1
@Eddy_Em
Не советую scanf использовать, не очень это хорошая функция. Лучше преобразовать чем-нибудь вроде strtol, проверить допустимость диапазона и если все ОК, внести новый элемент.
Сам массив "резиновым" создать не получится: нужно сначала выделить память подо все элементы. Если нужен действительно "резиновый" массив, то следует завести что-нибудь вроде связанных списков.
Ну и как говорил Армянское Радио, читать поэлементно.
Т.е. что-то вроде
int main(int argc, char **argv){
   int i, L = argc - 1;
   if(!L) return -1;
   int arr = malloc(L*sizeof(int)); // в C11 можно и так: arr[L], но если L будет большим, получится "упс"
   if(!arr) return -2;
   for(i = 0; i < L; i++)
     arr[i] = check_and_get(argv[i+1]); // а в этой функции производится преобразование строки в число и проверка
   ...
   return 0;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
gbg
@gbg
Любые ответы на любые вопросы
Вы неправильно применяете функцию. Читать массив нужно в цикле, поэлементно.
Ответ написан
@werktone
Похоже, что ваш компилятор не поддерживает стандарт C99, и поэтому объявлять переменные (и массивы в том числе) разрешается только в начале блока. Решения есть два:
  1. Использовать любой современный компилятор. Тогда все будет работать так, как вы и хотели.
  2. Выделять динамическую память, вместо объявления статического массива: (функци malloc/calloc и т.д.)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы