Új hozzászólás Aktív témák

  • shev7
    veterán

    ÁÁÁ hibáztam :) sorry

    Ez a jó leteszteltem most :)

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

    int egesze(char[]);

    int main(int argc, char *argv[]) {
    int i = 0, x=0;
    int dec;
    char rom[50];
    if(argc == 1){
    perror("Hianyzik a parameter!");
    }

    for(x=1;x<argc;x++){
    if(egesze(argv[x])){
    dec = atoi(argv[x]);
    }else{
    perror("A parameterlistaban nem megfelelo az egyik ertek!");
    }

    while(dec>=1000){
    dec -= 1000;
    rom[i] = 'M';
    i++;
    }
    if (dec>=900){
    dec-=900;
    rom[i] = 'C';
    i++;
    rom[i] = 'M';
    i++;
    }
    if(dec>=500){
    dec -= 500;
    rom[i] = 'D';
    i++;
    }
    if (dec>=400){
    dec -= 400;
    rom[i] = 'C';
    i++;
    rom[i] = 'D';
    i++;
    }
    while(dec>=100){
    dec = dec-100;
    rom[i] = 'C';
    i++;
    }
    if(dec>=90){
    dec -= 90;
    rom[i] = 'X';
    i++;
    rom[i] = 'C';
    i++;
    }
    if(dec>=50){
    dec -= 50;
    rom[i] = 'L';
    i++;
    }
    if(dec>=40){
    dec -= 40;
    rom[i] = 'X';
    i++;
    rom[i] = 'L';
    i++;
    }
    while(dec>=10){
    dec -= 10;
    rom[i] ='X';
    i++;
    }
    if(dec == 9){
    rom[i] = 'I';
    i++;
    rom[i] = 'X';
    i++;
    }
    else{
    if(dec >= 5){
    dec -= 5;
    rom[i] = 'V';
    i++;
    }
    if(dec == 4){
    rom[i] = 'I';
    i++;
    rom[i] = 'V';
    i++;
    }
    else{
    while(dec > 0){
    dec -= 1;
    rom[i] = 'I';
    i++;
    }
    }
    }
    rom[i]='\0';
    printf(" %s", rom);
    }
    }

    int egesze(char s[]){
    int i=0, kezd;
    while (s[i]==' ' || s[i]=='\n' || s[i]=='\t')++i;
    if(s[i]=='+' || s[i]=='-')++i;
    kezd=i;
    while(s[i]>='0' && s[i]<='9')++i;
    if(i==kezd || s[i]!=' ' && s[i]!='\t' && s[i]!='\n' && s [i]!=0) return 0;
    else return 1;}

    utananeztem a perrornak, es ahogy nezem ennek az a lenyege, hogy egy globalis valtozo tarolja, hogy a program futtatasa soran milyen hiba lepett fel, es a parameterul adott string utan kiirja. Tehat teszem azt, ha az atoi-t ugy probalnad meghivni, hogy elotte nem ellenorzod le hogy konvertalhato-e szamma a string, akkor ha hiba tortent, beallitana az errno nevu globalis valtozot (hivas elott erdemes nullazni, es includolni kell az errno.h-t) Ha az atoi hivas utan ellenorzod, hogy az errno erteke 0. Ha nem, akkor hivsz egy perror-t ami kirna a szoveget, meg az errno hibakodnak megfelelo szoveget. De mivel te mindig leellenorzod, hogy a szam konvertalhato-e, a program futasa soran sosem kap rossz parametert, sosem fog az errno erteke megvaltozni, ezert a perror hivas ebbol a szempontbol felesleges, irhatnal egybol a stderr-re is.

    Visszaterve a temara: mivel fogalmam sincs mi az ami Kernighan-Ritchie C es mi az ami nem, fogalmam sincs mi a baja. De ha perror-t lehet hasznalni Kernighan-Ritchie C-ben, akkor lehet, hogy arra gondol a tanero amit fennt levezettem mert akkor az lehet hogy Kernighan-Ritchie-sebb :D

Új hozzászólás Aktív témák