Mnożenie liczb rzymskich

0

Witam, jestem początkującym programistą. Na zajęcia mam przygotować program, który będzie mnożył liczby rzymskie. Domyślam się że trzeba go "złożyć" z trzech funkcji: Zmiana rzymskiej na arabską, mnożenie i zmiana arabskiej na rzymską. O ile z dwiema ostatnimi funkcjami nie mam problemu, to ze zmianą liczby rzymskiej na arabską wychodzi mi do pewnego momentu. Dokładniej do czwartego miejsca w tablicy t[4] wychodzi mi puste pole i nie wiem dlaczego. Program do czterech znaków działa poprawnie, a gdy znaków jest więcej nie uwzględnia ich. Czy moglibyście mi powiedzieć, gdzie leży problem ?

#include <stdio.h>
#include <stdlib.h>
char t[];
int i,w,b,p;/*b-biezaca, p-poprzednia,w-wynik*/
int main()
{	scanf("%s",t);
	i=0;
	w=0;
	while((t[i])!='\0') /*zliczanie znaków w tablicy*/
	i+=1;
	printf("%d\n",i);
	while (i>=0) /* branie każdej litery od prawej i zamiana jej na składnik sumy*/
	{
	if(t[i]=='\0')
	p=1;
	else if(t[i]=='i')
	b=1;
	else if(t[i]=='v')
	b=5;
	else if(t[i]=='x')
	b=10;
	else if(t[i]=='l')
	b=50;
	else if(t[i]=='c')
	b=100;
	else if(t[i]=='d')
	b=500;	
	else if(t[i]=='m')
	b=1000;
	else 
	printf("Nieprawidlowy znak");
	if(b>=p)
	w=w+b;
	else
	w=w-b;
	p=b;
	i-=1;
	}
	printf("%d\n",w);


	return 0;
} 
1
  1. Twój błąd polega na tym że masz tabicę 0 elementową a wpisujesz tam coś. Nie możesz w C utworzyć tablicy na "dowolną ilość elementów" a tobie się chyba wydaje że jak zrobisz tablicę bez podawania rozmiaru to tak będzie. Nie, nie będzie tak. Tablica będzie miała 0 elementów a ty w tej chwili wychodzisz poza jej zakres. Czemu to czasem działa? Bo C/C++ takich rzeczy nie sprawdza bo zakłada że programista rozumie co robi...
        while((t[i])!='\0') /*zliczanie znaków w tablicy*/
        i+=1;

a strlen() to ci ukradli?

0

No dzięki :) Wszystko działa. Załączam poprawiony kod, może się komuś przyda.

#include <stdio.h>
#include <stdlib.h>
char t[30];
int i,w,b,p;/*b-biezaca, p-poprzednia,w-wynik*/
int main()
{	scanf("%s",t);
	i=0;
	w=0;
	i=strlen(t);/*zliczanie znaków w tablicy*/
	while (i>=0) /* branie każdej litery od prawej i zamiana jej na składnik sumy*/
	{
	if(t[i]=='\0')
	p=1;
	else if(t[i]=='i')
	b=1;
	else if(t[i]=='v')
	b=5;
	else if(t[i]=='x')
	b=10;
	else if(t[i]=='l')
	b=50;
	else if(t[i]=='c')
	b=100;
	else if(t[i]=='d')
	b=500;	
	else if(t[i]=='m')
	b=1000;
	else 
	printf("Nieprawidlowy znak");
	if(b>=p)
	w=w+b;
	else
	w=w-b;
	p=b;
	i-=1;
	}
	printf("%d\n",w);


	return 0;
} 

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