Wyswietlacz jezyk c

0
#include<stdio.h>
#include<string.h>
#define MAX 7

void wyswietl(char t[])
{
	int i,j;
	for(i=0;i<3;i++)
	{
		
		for(j=0;j<7;j++)
		{
			if(i==0)
			{
				if(t[j]==1 || t[j]==4)	printf("    ");
				else printf(" _  ");
			}
			if(i==1)
			{
				if(t[j]==0) printf ("| | "); 
				if(t[j]==1 || t[j]==7) printf("  | "); 
				if(t[j]==2 || t[j]==3) printf(" _| "); 
				if(t[j]==4 || t[j]==8 || t[j]==9) printf("|_| "); 
				if(t[j]==5 || t[j]==6) printf("|_  ");								
			}
			if(i==2)
			{
				if(t[j]==1 || t[j]==7 || t[j]==4) printf("  | "); 
				if(t[j]==5 || t[j]==9 || t[j]==3) printf(" _| "); 
				if(t[j]==6 || t[j]==8 || t[j]==0) printf("|_| "); 
				if(t[j]==2) printf ("|_  ");
			} 
		}
		printf("\n");
	}
}



int main()
{
	char tab[MAX];
	int count;
	char s;
	while((s = getchar()) && s != '\n'){
		tab[count] = s;
		count++;
	}
	for(int i=0; i<MAX; i++){
		printf("tab[%d]=%c\n", i, tab[i]);
	}
	wyswietl(tab);	
	return 0;
	
}

Mam problem z tym programem. Program ma pobierać cyfry do tablicy i wyświetlać je na wyświetlaczu.
Wydaje mi sie ze tablica jest dobrze uzupelniona bo jak ją wyswietlam to jest ok, ale gdy przekaze ja do funkcji "wyswietl" to funkcja wyswietla kreski. Wcześniej sprawdzałem dla tablicy zadeklarowanej i od razu uzupełnionej i funkcja "wyswietl" działa poprawnie.

2
Maciek1994 napisał(a):

Wydaje mi sie ze tablica jest dobrze uzupelniona ...

Właśnie, wydaje ci się.

int count=0;
...
for(int i=0;i<count;++i)
...
0

@_13th_Dragon Problemem nie jest to, że po wczytaniu pierwszego znaku zostaje też wczytany znak końca linii i pętla się kończy?

0
_13th_Dragon napisał(a):
Maciek1994 napisał(a):

Wydaje mi sie ze tablica jest dobrze uzupelniona ...

Właśnie, wydaje ci się.

int count=0;
...
for(int i=0;i<count;++i)
...

gdzie ta petle mam zastosować bo nie bardzo wiem o co ci chodzi

0

Mi sie wydaje ze problem leży w przekazaniu do funkcji "wyswietl" a nie w pobieraniu liczb do tablicy.

0

Masz całkowitą racje - wydaje ci się.

0

No to jak jesteś taki mądry to powiedz mi co mam źle.

0

Teraz to sie juz nie dowiesz.
Rzuci taki "znawca" suchym kodem i radz se sam.
Ciezko napisac 2 linijki wytlumaczenia.(tak,tak, wiem, zaraz bedzie ze jak ktos nie potrafi poradzic sobie z takim problemem to niech rzuci informatyke, bo przeciez nikt nigdy nie mial zadnego problemu nawet z jak sie pozniej okazuje banalnym problemem).

0
zalosne napisał(a):

Teraz to sie juz nie dowiesz.
Rzuci taki "znawca" suchym kodem i radz se sam.
Ciezko napisac 2 linijki wytlumaczenia.(tak,tak, wiem, zaraz bedzie ze jak ktos nie potrafi poradzic sobie z takim problemem to niech rzuci informatyke, bo przeciez nikt nigdy nie mial zadnego problemu nawet z jak sie pozniej okazuje banalnym problemem).

Zgadzam się. Już parę razy pisałem na tym forum bo nie mogłem sobie poradzic, ale nigdy konkretnej odpowiedzi nie dostałem.

0

Dostałeś konkretną odpowiedź, tylko że informatyka to nie dla ciebie a z tego powodu odpowiedzi nie zrozumiałeś.
int count=0; masz w programie int count; - zmienna nie zainicjalizowana więc zamiast wpisywać do tablicy mażesz po pamięci.
for(int i=0;i<count;++i) masz w programie for(int i=0;i<MAX;i++) - nie używaj i++ jeżeli możesz użyć ++i (dlaczego nie wyjaśniam bo i tak nie zrozumiesz); masz wprowadzone count elementów, count może być mniejszy od MAX.

Zmień kierunek na np dziennikarstwo dopóki nie jest zbyt późno.

0
_13th_Dragon napisał(a):

nie używaj i++ jeżeli możesz użyć ++i

Mógłbyś to wyjaśnić. Nie mówię że w tym wątku, może na mikroblogu. Albo może mini-seria z ciekawostek języka C? :)

0

Tylko na tym forum ze 100 razy to wyjaśniałem, jak nie umiesz znaleźć to i tak informatyka z ciebie nie będzie zaś wyjaśnienie tego tobie to zwykła strata czasu.

0

Po co się wypowiadasz na forum jak nic nie potrafisz wytłumaczyć. To co przedtem napisałes odnosi się do pętli która wyświetla tablice, a nie w tym jest problem jak nie wierzysz to wklej sobie kod do kompilatora i sprawdz bo chba nie wiesz w czym jest problem.

0
_13th_Dragon napisał(a):

Tylko na tym forum ze 100 razy to wyjaśniałem, jak nie umiesz znaleźć to i tak informatyka z ciebie nie będzie zaś wyjaśnienie tego tobie to zwykła strata czasu.

Pomyliłeś sobie rozmówców. Ja nie jestem Maciek1996. Ale poszukam, dzięki.

0
wyzwy napisał(a):
_13th_Dragon napisał(a):

Tylko na tym forum ze 100 razy to wyjaśniałem, jak nie umiesz znaleźć to i tak informatyka z ciebie nie będzie zaś wyjaśnienie tego tobie to zwykła strata czasu.

Pomyliłeś sobie rozmówców. Ja nie jestem Maciek1996. Ale poszukam, dzięki.

Nie pomylil bo do kazdego ktory wie mniej od niego(bo wiedze to on posiada sporą) odnosi sie w taki wlasnie sposob. Nie wiem czy lepiej sie czuje jak komus nawrzuca ze nie bedzie z niego informatyka, czy moze w taki sposob sie dowartosciowuje?

1

Pierwszy błąd który masz poprawić to jest to o czym napisał dragon. Tworzysz sobie zmienną count gdzieś w jakimś miejscu w pamięci, w jakimś miejscu które wybrał Ci system. W miejsce często jest wypełnione zerami, czasami zdarza się jednak, że poprzedni program zostawił tam po sobie bałagan i np. masz tam liczbę 21554363. Teraz jak robisz tab[count] = s, to piszesz w 21554363 miejscu tablicy która ma 7 miejsc.
Dlatego zawsze się inicjuje zmienne przed jej użyciem, w Twoim przypadku wystarczy przypisać 0 i po krzyku.
Druga sprawa to druga pętla, którą też wytknął dragon, po co liczysz count, skoro nigdzie go nie używasz?! Czy przypadkiem nie miał on być użyty właśnie w drugiej pętli(zarówno w main jak i w tej drugiej funkcji).
I trzecia, ostatnia. Naprawdę, nie mam pojęcia do czego miała służyć ta funkcja, zero pomysłów :/

0

#include<stdio.h>
#define MAX 7

void wyswietl(char t[])
{
int i,j;
for(i=0;i<3;i++)
{

	for(j=0;j<7;j++)
	{
		if(i==0)
		{
			if(t[j]==1 || t[j]==4)	printf("    ");
			else printf(" _  ");
		}
		if(i==1)
		{
			if(t[j]==0) printf ("| | "); 
			if(t[j]==1 || t[j]==7) printf("  | "); 
			if(t[j]==2 || t[j]==3) printf(" _| "); 
			if(t[j]==4 || t[j]==8 || t[j]==9) printf("|_| "); 
			if(t[j]==5 || t[j]==6) printf("|_  ");								
		}
		if(i==2)
		{
			if(t[j]==1 || t[j]==7 || t[j]==4) printf("  | "); 
			if(t[j]==5 || t[j]==9 || t[j]==3) printf(" _| "); 
			if(t[j]==6 || t[j]==8 || t[j]==0) printf("|_| "); 
			if(t[j]==2) printf ("|_  ");
		} 
	}
	printf("\n");
}

}

int main()
{
char tab[MAX];
int i=0;
int s;
while((s = getchar()) && s != '\n'){
tab[i] = s;
i++;
}
for(int i=0; i<MAX; i++){
printf("tab[%d]=%c\n", i, tab[i]);
}
wyswietl(tab);
return 0;

}

OK teraz poprawiłem tak ale dalej nie chce wyświetlac cyfr na wyświetlaczu.

0

Nie może mi nikt napisac jak ma wygladac funkcja main()?
Gdy w main() wpisze przkładowa tablice
char[MAX]={1,2,3,1,4,5,6};
i wywołam funkcje "wyswietl"
to wszystko działa poprawnie

1

Druga pętla jest dalej źle, patrz post dragona.
Drugie chyba wiem o co chodzi w tej dziwnej funkcji :)

Zrób taki eksperyment

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

int main()
{
    char string[] = "12456";

    if(string[0] == 1)
        printf(":D \n");
    else
        printf("Wez sie za jakis kurs \n");

    if(string[0] == '1')
        printf("Bo na razie kiepsko Ci idzie... \n");
    else
        printf(" :( \n");
}

Każdy znak w pamięci to jakaś liczba i tak np. za znak '2' odpowiada liczba 50, ty porównujesz te liczby, a nie cyfry(znaki) i stąd problem.
Main dalej źle (Jak podasz 3 cyfry, to niepotrzebnie wyświetlasz printf("tab[%d]=%c\n", i, tab[i]); dla znaku 3,4,5 oraz 6).

0
Maciek1994 napisał(a):

Nie może mi nikt napisac jak ma wygladac funkcja main()?
Gdy w main() wpisze przkładowa tablice
char[MAX]={1,2,3,1,4,5,6};
i wywołam funkcje "wyswietl"
to wszystko działa poprawnie

Czytaj co do ciebie się pisze. W poście: http://4programmers.net/Forum/C_i_C++/233955-wyswietlacz_jezyk_c?p=1035225#id1035225 w komentarzu napisałem:

patrz komentarz do poprzedniego postu.

W Komentarzu do poprzedniego postu: http://4programmers.net/Forum/C_i_C++/233955-wyswietlacz_jezyk_c?p=1035219#id1035219 napisałem:

Nie: http://ideone.com/tf05lW - _13th_Dragon

Miałem nadzieje że rozwój intelektualny pozwala ci się domyślić się że należy w ten link kliknąć, przepraszam jeżeli się myliłem.

0

jeśli potrzebujesz pomocy napisz do mnie na maila: [email protected]

0

for(int i=0; i<MAX; i++){
printf("tab[%d]=%c\n", i, tab[i]);
}
Ta petla jest dodatkowa zeby zobaczyc co sie pobrało do tablicy za wyswietlanie odpowiada funkcja wyswietl

0

W funkcji wyswietl mylisz kod ASCII znaku ze znakiem. 1 to nie to samo co '1'.
O tym już napisał ci @Zellus ale wątpię że zrozumiałeś więc pisze jeszcze raz.
Doprowadź funkcje wyswietl aby działało z: char[MAX]={'1','2','3','1','4','5','6'}; lub w pętle zamień tab[count]=s-'0';

0

Nie, nie pomyliłem. To samo dotyczy ciebie.

To że zasugerowałem żebyś robił mini-serie o ciekawostkach programowania w C? Masz sporą wiedzę, i ją udowadniasz (gratuluję) ale wygląda na to że czasami masz gorszy dzień i ci odpierdala. Rusz głową czasem. P.S. znalazłem parę stron o tym w googlach natomiast nic co ty pisałeś na tym forum o post/pre inkremetacji.

0

Diekuje bardzo za odpowiedz. Teraz wszystko zrozumiałem, nie można było napisać tak od razu.

1

Oczywiście że nie można było.
Podałem dwa błędy które popełniłeś w funkcji main.
Co robi ta twoja wyswietl bez butelki nie da się zrozumieć a ty nie podałeś.
Dopiero jak podałeś że dla char[MAX]={1,2,3,1,4,5,6}; działa ci tak jak chcesz to @Zellus zrozumiał o co chodzi.

Tak to powinieneś zrealizować:

#include <stdio.h>
#include <ctype.h>

void wyswietl(char t[])
  {
   static const char *digits[3][10]=
     {
        {" _ ","   "," _ "," _ ","   "," _ "," _ "," _ "," _ "," _ "},
        {"| |","  |"," _|"," _|","|_|","|_ ","|_ ","  |","|_|","|_|"},
        {"|_|","  |","|_ "," _|","  |"," _|","|_|","  |","|_|"," _|"}
     };
   for(unsigned y=0;y<3;++y)
     {
      for(unsigned i=0;t[i];++i) if(isdigit(t[i])) printf(" %s",digits[y][t[i]-'0']);
      printf("\n");
     }
  }

int main()
  {
   char tab[100];
   while((scanf("%99s",tab)==1)&&(tab[0])) wyswietl(tab);
   return 0;
  }

http://ideone.com/tBxCor

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