brak konwersji ciągu cyfr

0

Siemanko, czemu program zamienia każdą cyfrę osobno, nie uwzględnia ciągu znaków które tworzą cyfrę.

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

void changeToRoman(int a)
{    
    int s;
    int d;
    int j;
    int t;    
    int plik2;
    
   	plik2 = open("liczbyRzymskie.txt",O_WRONLY|O_APPEND);
		if(plik2 == -1)	
		{
		perror("Blad otwarcia pliku!");
		exit(1);
		}
    if(a!=0)
     {
       j = a%10;
       d = (a/10)%10;
       s = a/100;
       t = a/1000;
       
       
 	switch(t)
   { 
      case 1: write (plik2,"M",1); break;
      case 2: write (plik2,"MM",2); break;
      case 3: write (plik2,"MMM",3); break;
   }
 
	switch(s)
   { 
      case 1: write (plik2,"C",1); break;
      case 2: write (plik2,"CC",2); break;
      case 3: write (plik2,"CCC",3); break;
      case 4: write (plik2,"CD",2); break;
      case 5: write (plik2,"D",1); break;
      case 6: write (plik2,"DC",2); break;
      case 7: write (plik2,"DCC",3); break;
      case 8: write (plik2,"DCCC",4); break;
      case 9: write (plik2,"CM",2); break;
   }
   
    	switch(d)
   { 
      case 1: write (plik2,"X",1); break;
      case 2: write (plik2,"XX",2); break;
      case 3: write (plik2,"XXX",3); break;
      case 4: write (plik2,"XL",2); break;
      case 5: write (plik2,"L",1); break;
      case 6: write (plik2,"LX",2); break;
      case 7: write (plik2,"LXX",3); break;
      case 8: write (plik2,"LXXX",4); break;
      case 9: write (plik2,"XC",2); break;
   
   }
	switch(j)
   { 
      case 1: write (plik2,"I",1); break;
      case 2: write (plik2,"II",2); break;
      case 3: write (plik2,"III",3); break;
      case 4: write (plik2,"IV",2); break;
      case 5: write (plik2,"V",1); break;
      case 6: write (plik2,"VI",2); break;
      case 7: write (plik2,"VII",3); break;
      case 8: write (plik2,"VIII",4); break;
      case 9: write (plik2,"IX",2); break;
   }     
 
   write (plik2," ",1);
   close(plik2);
}
}

int main()
{
    int plik;
    int l;
	char znak[1];
	plik = open("liczbyArabskie.txt", O_RDONLY);
	if(plik == -1)
	{
	 perror("Blad otwarcia pliku!");
	 exit(1);
	}
	
   int size = 0;
   while((size=read(plik, znak, 1))>0)
	{
	l = atoi(znak);
	if(l > 0)
	{
		changeToRoman(l);
	}
	}
	int i=0;
	scanf("%c", &i);
    return 0;
}

1

..które tworzą *liczbę

0

A jak jest liczba 1000 to co dostaje w wejściu? Cyfry 1, 0, 0 i 0. No i pierwszy raz widzę deklarację tablicy 1-elementowej.

0

ale jak napisze np char znak[15]; to to nic nie zmienia

0
Wielki Samiec napisał(a):

ale jak napisze np char znak[15]; to to nic nie zmienia

A co Twoim zdaniem ta liczba 1 oznacza tutaj?

 while((size=read(plik, znak, 1))>0)
0

no ok...przy 4 pokazuję np MXLII, ale niestety jest to błędy wynik. W pliku wejsciowym mam ghubhj 4 ijhiubgui 2 ikgbiu 1242 412 ijhiou 63 uighbi 2014 iubujbk 1 555 5 jako żeby łapało same liczby i je konwertowało

0

MXLII CDXII LXIII XIV DLV DLV to jest na wyjściu

0

widze ze na tym forum nikt nie chce pomoc tylko ma pretensje ze ktos pyta

1
Wielki Samiec napisał(a):

no ok...przy 4 pokazuję np MXLII, ale niestety jest to błędy wynik. W pliku wejsciowym mam ghubhj 4 ijhiubgui 2 ikgbiu 1242 412 ijhiou 63 uighbi 2014 iubujbk 1 555 5 jako żeby łapało same liczby i je konwertowało

Bo jak dasz np:

 while((size=read(plik, znak, 4))>0)

to bedzie czytać pokolei
ghub
hj 4
ijh...

Jak na moje to czytaj po jednym znaku i sprawdzaj czy jest cyfrą. Jak jest to czytaj dopóki czytasz cyfry. Jak się cyfry skończą to przekazuj dopiero całą liczbę do funkcji

1
Czarny Krawiec napisał(a):

widze ze na tym forum nikt nie chce pomoc tylko ma pretensje ze ktos pyta

No tak, utworzyliśmy związek zawodowy i strajkujemy, bo płacą nam za mało za pomaganie. Napisz skargę do trybunału konstytucyjnego.

Wróżki nie jesteśmy, skąd mamy wiedzieć jak poprawiłeś swój program skoro go nie pokazujesz. Zmieniłeś parametr funkcji read? Na jaki? I jakbyś nie zauważył to pytania są formą pomocy, natomiast pretensje ma w tym wątku tylko 1 osoba.

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