Пожалуйста, не используйте gets
. Это опасно .
Что касается вашей ошибки в примере scanf
, первая проблема - это строка
int size,counter,marks[size];
, которая объявляет marks
с неинициализированным size
значение.Попробуйте сначала инициализировать size
, а затем объявить массив marks
.
Ваша вторая проблема - scanf
строка форматирования.Используйте scanf
, чтобы прочитать отформатированный ввод, а не выводить подсказку.Для этого используйте puts
или printf
.
Вот полный пример:
#include <stdio.h>
int main(void) {
int size;
printf("Enter a size value: ");
scanf("%d", &size);
int marks[size];
for (int i = 0; i < size; i++) {
printf("Enter element %d: ", i);
scanf("%d", &marks[i]);
}
printf("You entered: ");
for (int i = 0; i < size; i++) {
printf("%d ", marks[i]);
}
puts("");
return 0;
}
Вот примерный прогон:
Enter a size value: 4
Enter element 0: 88
Enter element 1: 77
Enter element 2: 66
Enter element 3: 55
You entered: 88 77 66 55
Если вы пишете ANSI C-совместимый код вы можете использовать динамическую память с malloc
:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int i, size, *marks;
printf("Enter a size value: ");
scanf("%d", &size);
if (size < 1) {
fprintf(stderr, "Invalid size specified\n");
exit(1);
}
marks = malloc(size * sizeof(int));
if (!marks) {
fprintf(stderr, "malloc failed\n");
exit(1);
}
for (i = 0; i < size; i++) {
printf("Enter element %d: ", i);
scanf("%d", &marks[i]);
}
printf("You entered: ");
for (i = 0; i < size; i++) {
printf("%d ", marks[i]);
}
free(marks);
puts("");
return 0;
}