C kompilacja w gcc

robin5hood
Użytkownik
Użytkownik
Posty: 1676
Rejestracja: 2 kwie 2007, o 14:43
Płeć: Mężczyzna
Lokalizacja: warszawa
Podziękował: 178 razy
Pomógł: 17 razy

C kompilacja w gcc

Post autor: robin5hood »

Mam program który się kompiluje za pomocą DEV C++ a gdy chce go skompilowac w gcc w linuxie wyrzuca bład co należy w nim zmienic aby działał w gcc

Kod: Zaznacz cały

#include <stdio.h>

int main()
{

int x,m=0,d=0;
char s[256];

printf("wpisz ciag znakow\n");
gets(s);

 for(x=0; s[x]; x++)
   {

    if(s[x]>='a' && s[x]<='z')
        {
            s[x]=s[x]-32;
        }

    else if(s[x]>='A' && s[x]<='Z')
    {
    s[x]+=32;
    }

    }

printf(s);
getchar();
}
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

C kompilacja w gcc

Post autor: soku11 »

Kod jest raczej poprawny, chociaz mozna go zapisac ladniej:

Kod: Zaznacz cały

#include <stdio.h>

int main()
{
  int x;
  char s[256];

  printf("wpisz ciag znakow\n");
  gets(s);

  for(x=0;s[x];++x)
    if(s[x]>='a' && s[x]<='z')
      s[x]=s[x]-32;
    else if(s[x]>='A' && s[x]<='Z')
      s[x]+=32;

  printf(s);
  getchar();
  return 0;
}
Moze napisz dlaczego ci go nie chce kompilowac?? Przyczepia sie do czegos?? Pozdrawiam.
robin5hood
Użytkownik
Użytkownik
Posty: 1676
Rejestracja: 2 kwie 2007, o 14:43
Płeć: Mężczyzna
Lokalizacja: warszawa
Podziękował: 178 razy
Pomógł: 17 razy

C kompilacja w gcc

Post autor: robin5hood »

do gets
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

C kompilacja w gcc

Post autor: soku11 »

Heh... Wrozka to ja nie jestem Napisz jaki masz komunikat. Pozdrawiam.
robin5hood
Użytkownik
Użytkownik
Posty: 1676
Rejestracja: 2 kwie 2007, o 14:43
Płeć: Mężczyzna
Lokalizacja: warszawa
Podziękował: 178 razy
Pomógł: 17 razy

C kompilacja w gcc

Post autor: robin5hood »

spójrz zrobiłem jednak funkcje , chyba bedzie dziłac

Kod: Zaznacz cały

#include<stdio.h>
void zamien_m(char *s)
{

for (;*s!='\0';s++)
if  ((*s>='a') && (*s<='z'))
*s=*s-32;
else if(*s>='A' && *s<='Z')
      *s+=32;
};
int main()
{
    printf("Zamienia duze litery na małe i odwrtotnie \n");
char napis[]="gdagdagdFDFFFFFFF";
zamien_m(napis);
printf(napis);
scanf("%");
return 0;
};
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

C kompilacja w gcc

Post autor: soku11 »

Kod: Zaznacz cały

#include<stdio.h>

void zamien_m(char* s)
{
  for (;*s!='\0';++s)
    if ((*s>='a') && (*s<='z'))
      *s=*s-32;
    else if(*s>='A' && *s<='Z')
      *s+=32;
}

int main()
{
  char napis[]="gdagdagdFDFFFFFFF";
  printf("Zamienia duze litery na małe i odwrtotnie \n");
  zamien_m(napis);
  printf(napis);
  /*getchar();*/    /* jesli potrzebujesz */
  return 0;
}

Teraz bedzie dzialac :) Swoja droga nie wyeliminowales poprzedniego problemu, tylko sobie zmieniles program pozbawiajac go wczytywania danych...
Pozdrawiam.


BTW. Sprawdzilem ten twoj kod pod Solarisem i jest tez ok. gcc nic nie krzyczy :)
robin5hood
Użytkownik
Użytkownik
Posty: 1676
Rejestracja: 2 kwie 2007, o 14:43
Płeć: Mężczyzna
Lokalizacja: warszawa
Podziękował: 178 razy
Pomógł: 17 razy

C kompilacja w gcc

Post autor: robin5hood »

dzieki za tamto
Mam pytanie jak zmienić ten kod zeby pisało dodatkowo czy liczba jest parzysta, bez wzgledu na to czy jest z zakresu

Kod: Zaznacz cały

#include<stdio.h>
int main ()
{
int a,il;
int sp=0;
printf(" \t program sprawdzajacy czy jest z zakresu od 6 do 9 i czy jest to 7 \n podaj ile  liczb  \n podaj liczbe \a ");
scanf("%d",&il);
while(sp <il)
{
printf("podaj liczbe \n");
scanf("%d",&a);
if((a>6)&&(a<9)) {printf("liczba jest z powyzszego zakresu \n"); if (a==7) printf("i jest rowna 7 \n");
else printf("ale nie jest 7");} else printf("nie z przedziału \n");
sp++;
}

}

ps w tamtym poprzednim gcc wyrzuca taki bład:
/tmp/ccUkLg4d.o: In function `main':
nic.c:(.text+0x38): warning: the `gets' function is dangerous and should not be used.
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

C kompilacja w gcc

Post autor: soku11 »

Kod: Zaznacz cały

#include<stdio.h>

int main ()
{
  int a,il;
  int sp=0;

  printf("	 program sprawdzajacy czy jest z zakresu od 6 do 9 i czy jest to 7
podaj ile  liczb");
  scanf("%d",&il);

  while(sp<il)
  {
    printf("podaj liczbe ");
    scanf("%d",&a);

    if((a>6)&&(a<9))
    {
      printf("liczba jest z powyzszego zakresu ");
      if (a==7)
        printf("i jest rowna 7
");
      else
        printf("ale nie jest 7
");
    }
    else
      printf("liczba nie z przedzialu
");

    /* Test parzytosci */
    printf("%s
", (a%2==0 ? "liczba jest parzysta
":"liczba nie jest parzysta
"));

    ++sp;
  }

  return 0;
}
O tak Pozdrawiam.
robin5hood
Użytkownik
Użytkownik
Posty: 1676
Rejestracja: 2 kwie 2007, o 14:43
Płeć: Mężczyzna
Lokalizacja: warszawa
Podziękował: 178 razy
Pomógł: 17 razy

C kompilacja w gcc

Post autor: robin5hood »

dzieki
w tym poprzednim napisałem jaki bład wyrzuca gcc odnośnie tamtego pierwszego programu
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

C kompilacja w gcc

Post autor: soku11 »

To nie blad, tylko warning Wynika z tego, ze gets wczytuje do bufora nie zwazajac na jego rozmiar. Co moze prowadzic do nadpisywania pamieci. Aby pozbyc sie warninga sprobuj gets zastapic:

Kod: Zaznacz cały

fgets(s,255,stdin);
Powinno pomoc Pozdrawiam.
ODPOWIEDZ