Program się wysypuje przy tablicach

0

Witam!
Kiedy próbuję kompilować kod w Codeblocks:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,x,i;
int tab[n];

scanf("%d", &x);
for(i=0; i<n; i++)
{
    scanf("%d", &tab[i]);
}
    return 0;
}
 

To dostaję kominikat, że program przestał działać.

Jak wklejam jakiegoś gotowca:
To dostaje takie błędy:

 ||=== Build: Debug in testete (compiler: GNU GCC Compiler) ===|
E:\programy\codeblocks\testete\main.c||In function 'main':|
E:\programy\codeblocks\testete\main.c|9|error: 'for' loop initial declarations are only allowed in C99 mode|
E:\programy\codeblocks\testete\main.c|9|note: use option -std=c99 or -std=gnu99 to compile your code|
E:\programy\codeblocks\testete\main.c|11|error: redefinition of 'i'|
E:\programy\codeblocks\testete\main.c|9|note: previous definition of 'i' was here|
E:\programy\codeblocks\testete\main.c|11|error: 'for' loop initial declarations are only allowed in C99 mode|
E:\programy\codeblocks\testete\main.c|18|error: redefinition of 'i'|
E:\programy\codeblocks\testete\main.c|11|note: previous definition of 'i' was here|
E:\programy\codeblocks\testete\main.c|18|error: 'for' loop initial declarations are only allowed in C99 mode|
||=== Build failed: 5 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

Czym jest to spowodowane?

0

Nie wiem jak wygląda 'jakiś gotowiec' natomiast jeśli chodzi o podany przez Ciebie kod to zastanów się jaki rozmiar ma tablica intów

tab

.

1

Nieprzeczytaniem żadnego tutoriala przed wzięciem się za kodowanie.

int tab[n];

Tablice

0

No i ten, no

scanf("%d", &x);
for(i=0; i<n; i++)
0

Jeśli chodzi o gotowca to wygląda on tak:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n, pom;
    scanf("%d", &n);
    int tab[n];
    for (int i = 0; i < n; i++)
        scanf("%d", &tab[i]);
    for (int i = 0; i < n/2; i++)
    {
        /* Zamien zawartosc i-tego pola tablicy z zawartoscia (n-1-i)-ego. */
        pom = tab[i];
        tab[i] = tab[n-1-i];
        tab[n-1-i] = pom;
    }
    for (int i = 0; i < n; i++)
        printf("%d\n", tab[i]);
    return 0;
}
 

Błąd, który dostaje jest w 1 poście

0

I czego w tym komunikacie nie rozumiesz:

'for' loop initial declarations are only allowed in C99 mode
?

0

Nie rozumiem co to jest C99.

0

Albo np po odpaleniu tego:

 #include <stdio.h>
#include <stdlib.h>

int main()
{

int i, x,n, tab;

scanf("%d", &n);
for (i=0; i< n; i++)

    scanf("%d", &tab[i]);
for (i = n-1; i >=0; i--)
    printf("%d\n", tab[i]);


    return 0;
}

Dostaje blad:
E:\programy\codeblocks\testete\main.c|14|error: subscripted value is neither array nor pointer nor vector|

0
Pijany Młot napisał(a):

Nie rozumiem co to jest C99.

No tak, dostępu do internetu także nie masz.

C99 to standard języka C - kompilatorowi chodzi o to, że w C nie wolno Ci deklarować zmiennych w wyrażeniu inicjującym pętlę for.

Innymi słowy:

źle

for (int i=0; i<10; i++) {
}

**dobrze **

int i;
for (i=0; i<10; i++) {
}

I on sobie tę deklarację/definicję wyrzuca przed tę pętlę (tak jak w poprawnym przykładzie powyżej), zatem napotykając drugi raz na fora masz podwójną deklarację zmiennej i.

0

subscripted value is neither array nor pointer nor vector

angielska nie być trudna. tab jest intem. Powiedz mi, jak rozumiesz wyrażenie 1[2], analogiczne do tab[i]?

1 użytkowników online, w tym zalogowanych: 0, gości: 1