Co jest zle w tym kodzie?

0

Siedze i mecze sie z tym programem zamiana liczb na slowa i nie wiem jak to rozgryzc aby dzialalo w C
Co jest nie tak z strcat ?

#include <stdio.h>
#include <conio.h>
 
static char *jednosci[10] = {"", " jeden", " dwa", " trzy", " cztery", " piec", " szesc", " siedem", " osiem", " dziewiec"};
static char *nascie[10] = {"dziesiec", " jedenascie", " dwanascie", " trzynascie", " czternascie", " pietnascie", " szesnascie", " siedemnascie", " osiemnascie", " dziewietnascie"};
static char *dziesiatki[10] ={"", " dziesiec", " dwadziescia", " trzydziesci", " czterdziesci", " piecdziesiat", " szescdziesiat", " siedemdziesiat", " osiemdziesiat", " dziewiecdziesiat"};
static char *setki[10] = {"", " sto", " dwiescie", " trzysta", " czterysta", " piecset", " szescset", " siedemset", " osiemset", " dziewiecset"};
static char *x[6] = {"", " tys.", " mln.", " mld.", " bln.", " bld."};
 
void main()
{
char *slownie = " ";
long int        liczba;
int     koncowka;
int     rzad = 0;
int     j = 0;
int     minus = 0;
 
printf("Podaj liczbe do zamiany na slowa\n");
scanf("%d",&liczba);
 
if (liczba<0)
{
minus=1;
liczba=-liczba;
}
 
if (liczba==0) slownie="zero";
 
while (liczba>0)
{
koncowka=(liczba%10);
liczba/=10;

static char zzz[256];
//strcat(zzz, ones[s[i] - '0' - 1]);


if ((j==0)&&(liczba%100!=0 || koncowka!=0)) strcat(slownie, x[rzad]);
if ((j==0)&&(liczba%10!=1)) strcat(slownie, jednosci[koncowka]);
if ((j==0)&&(liczba%10==1))
{
strcat(slownie, nascie[koncowka]);
liczba/=10;
j+=2;
continue;
}
if (j==1) strcat(slownie, dziesiatki[koncowka]);
if (j==2)
{
strcat(slownie, setki[koncowka]);
j=-1;
rzad++;
}
j++;
}
 

printf("\nOdpowiedz:\n");
printf(slownie);
getch();
}
0

Złe w tym kodzie jest to, że w ogóle brak w nim wcięć.

0

Ten kod to jakiś koszmar. Ale odpowiedź na pytanie jest prosta:

  • tworzysz wskaźnik i nie alokujesz mu pamięci (zauważ że przypisanie jakiegoś stałego napisu typu "zero" nie wymaga alokacji pamięci, bo ten napis w trakcie kompilacji gdzieś wylądował w programie), swoją drogą powinny się tam chyba pojawić warningi przy tych przypisaniach do slownie
0
Shalom napisał(a)

Ten kod to jakiś koszmar. Ale odpowiedź na pytanie jest prosta:

  • tworzysz wskaźnik i nie alokujesz mu pamięci (zauważ że przypisanie jakiegoś stałego napisu typu "zero" nie wymaga alokacji pamięci, bo ten napis w trakcie kompilacji gdzieś wylądował w programie), swoją drogą powinny się tam chyba pojawić warningi przy tych przypisaniach do slownie

ehh... a jak mam zaalokować tą pamięć :/ ? czytam o tym kombinuje, a dalej nic mi nie wychodzi...

0

Wciaz cos zle... w ogole nic nie pokazuje, ehh.. nie cierpie tego c...

#include <stdio.h>
#include <conio.h>
 
static char *jednosci[10] = {"", " jeden", " dwa", " trzy", " cztery", " piec", " szesc", " siedem", " osiem", " dziewiec"};
static char *nascie[10] = {"dziesiec", " jedenascie", " dwanascie", " trzynascie", " czternascie", " pietnascie", " szesnascie", " siedemnascie", " osiemnascie", " dziewietnascie"};
static char *dziesiatki[10] ={"", " dziesiec", " dwadziescia", " trzydziesci", " czterdziesci", " piecdziesiat", " szescdziesiat", " siedemdziesiat", " osiemdziesiat", " dziewiecdziesiat"};
static char *setki[10] = {"", " sto", " dwiescie", " trzysta", " czterysta", " piecset", " szescset", " siedemset", " osiemset", " dziewiecset"};
static char *x[6] = {"", " tys.", " mln.", " mld.", " bln.", " bld."};
 
void main()
{
char *slownie = " ";
long int        liczba;
int     koncowka;
int     rzad = 0;
int     j = 0;
int     minus = 0;



 
printf("Podaj liczbe do zamiany na slowa\n");
scanf("%d",&liczba);
 
if (liczba<0)
{
minus=1;
liczba=-liczba;
}
 
if (liczba==0) slownie="zero";
 
while (liczba>0)
{
koncowka=(liczba%10);
liczba/=10;







if ((j==0)&&(liczba%100!=0 || koncowka!=0)){  

char* strnew(const char* x[rzad])
{
 *slownie = malloc(strlen(x[rzad])+1);
  strcat(slownie, x[rzad]);
 // return slownie;
}

}
















if ((j==0)&&(liczba%10!=1))  
{  

char* strnew(const char* jednosci[koncowka])
{
 *slownie = malloc(strlen(jednosci[koncowka])+1);
  strcat(slownie, jednosci[koncowka]);
//  return slownie;
}

}














if ((j==0)&&(liczba%10==1))
{
                           
char* strnew(const char* nascie[koncowka])
{
 *slownie = malloc(strlen(nascie[koncowka])+1);
  strcat(slownie, nascie[koncowka]);
//  return slownie;
}                           
                           
// printf("%s ", nascie[koncowka]);
 
 
 
 
 
 
liczba/=10;
j+=2;
continue;
}













if (j==1)     

{  

char* strnew(const char* dziesiatki[koncowka])
{
 *slownie = malloc(strlen(dziesiatki[koncowka])+1);
  strcat(slownie, dziesiatki[koncowka]);
//  return slownie;
}

}





if (j==2)
{
         
char* strnew(const char* setki[koncowka])
{
 *slownie = malloc(strlen(setki[koncowka])+1);
  strcat(slownie, setki[koncowka]);
  //return slownie;
}         
         
         
// printf("%s ", [koncowka]);   
 
 
 
 
 
 
j=-1;
rzad++;
}
j++;
}


printf("\nOdpowiedz:\n");
printf(slownie);
getch();
}
 
0

Bo to jest źle napisane. Pamięć mógłbyś alokowac tak:

#include <stdio.h>
#include <string.h>

#define bufferSize 100

const char *jednosci[10] = {"", " jeden", " dwa", " trzy", " cztery", " piec", " szesc", " siedem", " osiem", " dziewiec"};
const char *nascie[10] = {"dziesiec", " jedenascie", " dwanascie", " trzynascie", " czternascie", " pietnascie", " szesnascie", " siedemnascie", " osiemnascie", " dziewietnascie"};
const char *dziesiatki[10] = {"", " dziesiec", " dwadziescia", " trzydziesci", " czterdziesci", " piecdziesiat", " szescdziesiat", " siedemdziesiat", " osiemdziesiat", " dziewiecdziesiat"};
const char *setki[10] = {"", " sto", " dwiescie", " trzysta", " czterysta", " piecset", " szescset", " siedemset", " osiemset", " dziewiecset"};
const char *x[6] = {"", " tys.", " mln.", " mld.", " bln.", " bld."};

int main()
{
    char slownie[bufferSize];
    long int liczba;
    int koncowka;
    int rzad = 0;
    int j = 0;
    int minus = 0;

    printf("Podaj liczbe do zamiany na slowa\n");
    scanf("%ld",&liczba);

    if (liczba<0)
    {
        minus=1;
        liczba=-liczba;
    }

    if (liczba==0)
    {
        strncpy(slownie,"zero",bufferSize);
    }

    while (liczba>0)
    {
        koncowka=(liczba%10);
        liczba/=10;

        if ((j==0)&&(liczba%100!=0 || koncowka!=0))
        {
            strcat(slownie, x[rzad]);
        }
        if ((j==0)&&(liczba%10!=1))
        {
            strcat(slownie, jednosci[koncowka]);
        }
        if ((j==0)&&(liczba%10==1))
        {
            strcat(slownie, nascie[koncowka]);
            liczba/=10;
            j+=2;
            continue;
        }
        if (j==1)
        {
            strcat(slownie, dziesiatki[koncowka]);
        }
        if (j==2)
        {
            strcat(slownie, setki[koncowka]);
            j=-1;
            rzad++;
        }
        j++;
    }

    printf("\nOdpowiedz:\n");
    printf(slownie);
    return 0;
}

Ale ten kod nadal nie działa poprawnie. Uruchom to pod deubuggerem i zobacz czemu...

0

a co nalezy zrobic aby ten tekst nie byl wypisywany od konca ;/?

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