Kilka tablic o tej samej nazwie

0

Cześć,

Napisałem taki kod:

void myfunc(char []);

int main(void)
{	
	while(1)
	{	
		char data[] = "ab ";
		myfunc(data);
		
		char data2[] = "cd ";
		myfunc(data2);
		
		char data3[] = "ef ";
		myfunc(data3);
	}
}

void myfunc(char text[])
{
 // 
}

Jak mogę uprościć kod w głównej funkcji, aby za każdym razem używając funkcji "myfunc" nie musieć tworzyć kolejnej tablicy: data, data2, data3...

4

W C użyj tablicy dwuwymiarowej.
Jak to jest c++ to std::vector<std::string>, ewentualnie std::array<std::string>.
Poza tym, literały w c, jeżeli nie są modyfikowalne, to trzymaj jako const char * a w c++ jako std::string (const std::string).

3
#include <iostream>
using namespace std;

void myfunc(const char text[]) { cout<<'\r'<<text; }

int main()
{   
    const char *data[]={"ab ","cd ","ef "};
    while(true) for(int i=0;i<sizeof(data)/sizeof(*data);++i) myfunc(data[i]);
    return 0;
}
0

Cześć,

chodzi tutaj o C, dokładnie ATmega.
Dziękuję za przykłady, są pomocne.

Wykorzystanie pętli for jest w porządku, ale musiałbym zbierać informację do tablicy w różnych miejscach kodu i na sam koniec głównej pętli wywoływać pętle for, następnie moją funkcję.
Zależy mi na użyciu i wywołaniu funkcji "myfunc" w dowolnym miejscu "main" dowolną ilość razy.

To moje pierwsze kroki w C, w innych językach dla przykładu można zrobić to tak z powodzeniem:

myfunc(array() = "ab ");
myfunc(array() = "cd ");
myfunc(array() = "ef ");
myfunc(array() = "gh ");

Jak stworzyć coś takiego w C? Wiem, że C różni się znacząco zasadą względem innych języków i czy po prostu powinienem zmienić logikę działania tego kodu?

0
#include <stdio.h>

void myfunc(const char text[]) { printf("\r%s",text); }

int main()
{   
    const char *data[]={"ab ","cd ","ef "};
    while(true) for(int i=0;i<sizeof(data)/sizeof(*data);++i) myfunc(data[i]);
    return 0;
}
0

Może o to chodzi?

#include <stdio.h>

void myfunc(const char text[]) { printf("\r%s",text); }

int main()
{
    myfunc("ab ");
    myfunc("cd ");
    myfunc("ef ");
    return 0;
}
0
#define F_CPU 1000000
#include <stdio.h>

void myfunc(const char text[]) { printf("\r%s",text); }  // previous definition of 'myfunc' was here

int main()
{
	myfunc("ab ");
	myfunc("cd ");
	myfunc("ef ");
	return 0;
}

void myfunc(char text[]) // conflicting types for 'myfunc'
{
	//
}

// recipe for target 'main.o' failed

Błędy, które wyrzucił mi Mikrochip Studio zapisałem w komentarzach.
Wydaje się, jakby nie można było przekazywać argumentu jako "string", stąd użycie tablicy w pierwszym poście.
Więc pytanie, które mi się nasuwa, czy mogę w jakiś sposób to obejść w C nie deklarując nazwy tablicy
coś w stylu jak poniżej, ale nie znam na tyle składni C, aby napisać to w prawidłowym syntax.

myfunc([] = "ab ");
0

Weź może jakieś podstawy przeczytaj, deklarujesz funkcje po raz drugi stąd błąd.

#define F_CPU 1000000
#include <stdio.h>

void myfunc(const char text[]);

int main()
{
    myfunc("ab ");
    myfunc("cd ");
    myfunc("ef ");
    return 0;
}

void myfunc(const char text[]) // brak konfliktu
{
    printf("\r%s",text);
}

Co za debilne podejście dzielić funkcję na deklarację oraz definicję tylko po to aby zdefiniować funkcję po main?
To samo co wyżej:

#define F_CPU 1000000
#include <stdio.h>

void myfunc(const char text[])
{
    printf("\r%s",text);
}

int main()
{
    myfunc("ab ");
    myfunc("cd ");
    myfunc("ef ");
    return 0;
}

0

Tak, zgadzam się, że jest to nieuzasadnione, ale chciałem przyjść na forum z czymś, co już działa.
Z wniosków jakie wyciągnąłem, to zanim opublikowałem ten temat to byłem blisko rozwiązania już wczoraj... zabrakło "const".

#define F_CPU 1000000
#include <stdio.h>

void myfunc(char text[])
{
    printf("\r%s",text);
}

int main()
{
    myfunc("ab ");
    myfunc("cd ");
    myfunc("ef ");
    return 0;
}

Kod działa, dziękuję Ci.

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