Program pomija wczytywanie zmiennej,zamiana znaku na liczbe

0

Cześć.

Mój program w założeniu ma wczytywać liczby a jezeli zmienna SystemLiczbowy jest wieksza od 10 to rowniez chcialem by traktowal on np A jako liczbe 10 itd.

Problemem jest to że program pomija wczytywanie jednej ze zmiennych ( w tekscie kodu miejsce to jest zaznaczone komentarzem)

Mam tez pytanie dotyczace mojego pomyslu na zamiane znaku na wartosc liczbową.

Otóż ja chciałem to zrobić tak :

Wczytuje zmienna char np A który jest w tablicy na pozycji nr.10

Sprawdzam petla for czy znak wczytany jest rowny znakowi z TablicaZnakow,a jesli tak to wczytanej zmiennej char przypisuje indeks znaku czyli dla A np 10.
Pewnie istnieją jakieś lepsze pomysły na wykonanie czegoś takiego.

Proszę o wskazówki.

#include <stdio.h>
#define Max_size 256
#define N 36

int main (void)
{
//Program ma za zadanie wczytywac liczby z przedzialu od 1 do SystemLiczbowy-1
//  Czyli np dla SystemLiczbowy = 16 program ma wczytywac 1...2...3...F i znaki od A...F traktowac jako odpowiadajace im liczby

    int licznik,k,i,temp,status;
    char fnumber,number;
    char *Tablica1 = malloc(powto*system_liczbowy*sizeof(char));
    int *Tablica2 = malloc(system_liczbowy*sizeof(int));
    char TablicaZnakow[N] = {'0','1','2','3', '4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

    int system_liczbowy,powto;

    printf("Do jakiego systemu liczbowego\n");
    scanf("%d",&system_liczbowy);

    printf("Ile razy max \n");
    scanf("%d",&powto);

    k = 1;

   

    for(i=0; i<system_liczbowy*sizeof(int),i++;)
        Tablica2[i] = 0;




    printf("Wpisz liczbe\n");

    scanf("%c",&fnumber); //Tu program zaczyna nie wykonywac kodu **

    status = 0;      

    for(i=0; i<system_liczbowy-1; i++)
    {
        if(fnumber == TablicaZnakow[i]) status = 1; // Tutaj chce ustalic ktoremu znakowi z tablicy znakow odpowiada wczytana zmienna po to by przypisac jej numer tego znaku z tablicy
        fnumber = i;                                // W ten sposob chce przypisac np znakowi A liczbe 10
        break;
    }


    //Tu program zaczyna wykonywac kod **
    printf("Program opuszcza pierwszy scanf po Wpisz liczbe,nie wiem czemu  %c",fnumber);

    while(  status == 0 || fnumber<=0 || fnumber > system_liczbowy-1 )
    {
        while((temp=getchar()) != EOF && temp != '\n');
        scanf("%c", &fnumber);



        for(i=0; i<system_liczbowy-1; i++)
            if(fnumber == TablicaZnakow[i]) status = 1;
        fnumber = i;
        break;

        printf("Wpisz liczbe z przedzialu od  %d do %d \n",1,system_liczbowy-1,system_liczbowy);
    }

    Tablica1[0] = fnumber;
    Tablica2[fnumber]++;



    while( Tablica2[k] < powto)
    {
        scanf("%c",&number);
        status = 0;

        for(i=0; i<system_liczbowy-1; i++)
            if(number == TablicaZnakow[i]) status = 1;     
        number=i;
        break;


        while(status == 0   || ( (Tablica1[k-1] != TablicaZnakow[system_liczbowy-1]) && (Tablica1[k-1] >= number) )              )
        {

            while((temp=getchar()) != EOF && temp != '\n');

            printf("Musisz podac liczbe wieksza niz %c i mniejsza badz rowna  %d\n",Tablica1[k-1],system_liczbowy-1);
            scanf("%c", &number);

            status = 0;
            for(i=0; i<system_liczbowy-1; i++)
                if(number == TablicaZnakow[i]) status = 1;
            number=i;
            break;

        }

        Tablica2[number]++;
        Tablica1[k] = number;
        k++;
        licznik++;

    }



    free (Tablica1);
    free (Tablica2);
}
1

O czym ty gadasz?
To nawet się nie skompiluje!
char *Tablica1 = malloc(powto*system_liczbowy*sizeof(char)); - gdzie powto i system_liczbowy zadeklarowane dopiero później?
Może podaj pełną treść zadania bo z tego bajzlu co podałeś trudno odczytać cokolwiek.

0

Masz racje, przesuwalem deklaracje i nie zauważyłem. Hmm moim zdaniem kod jest sformatowany a problem opisany,mianowicie :

 status = 0;      
 
    for(i=0; i<system_liczbowy-1; i++)
    {
        if(fnumber == TablicaZnakow[i]) status = 1; // Tutaj chce ustalic ktoremu znakowi z tablicy znakow odpowiada wczytana zmienna po to by przypisac jej numer tego znaku z tablicy
        fnumber = i;                                // W ten sposob chce przypisac np znakowi A liczbe 10
        break;
    }                                                                                                

Program nie wykonuje, jakby pomija przedstawioną wyżej część kodu ,nie wczytuje zmiennej tylko przechodzi z miejsca które zaznaczyłem komentarzem w kodzie do następnego,również zaznaczonego miejsca.

Druga część postu dotycząca mojego prawdopodobnie słabego pomysłu na przekształcanie znaków np 'A' na numer im odpowiadający w tablicy : TablicaZnakow[] jest dobrze opisana, masz oczywiście prawo do innego zdania - ja do niczego cię nie zmuszam. Gdyby ktoś miał jakieś sugestię to będę wdzięczny.

0
  1. No to wklej coś co się kompiluje.
  2. Już dostałeś pomysł jak zrobić to szybko: http://4programmers.net/Forum/C_i_C++/241946-przypisanie_wartosci_liczbowej_do_zmiennej_char?p=1083210#id1083210
  3. Po kiego wczytujesz znak po znaku skoro możesz wczytać cały wiersz.
    Całość nie trzyma się kupy.
    Podaj dokładną treść zadania bo nawet nie wiem co jest konieczne potrzebne a co sobie po prostu ubzdurałeś.

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