Переформатирование кода
Обычный шаг, который поможет вам - это отформатировать нам
#include <stdio.h>
#include <stdlib.h>
#include "input2.h"
int main ( void )
{
int n = lese_int();
int laenge = n - 1;
int *array;
array = malloc( sizeof( int ) * laenge );
for ( int i = 2; i <= n; i++ )
{
array[i] = 1;
}
for ( int i = 0; i <= n; i++ )
{
if ( array[i] == 1 )
{
for ( int j = i; i * j <= n; j++ )
{
array[ i * j ] = 0;
}
}
}
for ( int i = 0; i < laenge; i++ )
{
printf( "%d, ", array[i] );
}
printf( "\n" );
print_prim( array, laenge );
free( array );
return ( 0 );
}
И функция print_prim
:
void print_prim ( int *array, int laenge )
{
for ( int i = 0; i < laenge; i++ )
{
if ( array[i] == 1 )
{
printf( "%d, ", i + 2 );
}
}
printf( "\n" );
}
Примечание: этот стиль является личным, и он не предназначен для ведения религиозных пылающих войн с использованием таких интервалов, как я, или скручивание фигурных скобок.
Ошибки, обнаруженные при чтении:
Вы используете C99,Примите это во внимание, прежде чем что-то изменить.( знаю ваш язык )
Вы выделяете из памяти n - 1
элементов, но вы пытаетесь получить доступ от элемента 2
к элементу n
, включая оба, впервый for
цикл.( знает, как работает выделение памяти )
Массивы начинаются с нуля ( insert joke ), поэтому вы не можете добраться до элемента n
ни элемент n - 1
.
print_prim
печатает только значение плюс 2 элемента массива, который содержит 1. Другими словами: попробуйте найти все позиции в массиве, который содержит 1, иувеличьте эту позицию на 2. ( умеете читать и отлаживать )
Я рекомендую вам изучить, как работает язык вместо trial'n'error на основе программирования.Это сэкономит вам много часов, и вы узнаете больше.