Nirvan Opublikowano 12 Maja 2012 Udostępnij Opublikowano 12 Maja 2012 Chcę odczytać 150 liczb z pliku txt więc zrobiłem taki programik: #include <cstdlib> #include <iostream> #include <cstdio> #include <stdlib.h> using namespace std; int main() { int i=0, tablica[150]; FILE*plik; plik=fopen("pesel.txt","r"); if (plik ==NULL) perror("Nie ma takiego pliku!"); else for(i=0; i<150; i++) { if (feof(plik)) break; fscanf(plik,"%d", &tablica[i]); cout << tablica[i] << endl; } getchar(); return 0; } Ale gdy je wypisuje to co któraś liczba ma myślnik na początku :|. I czym zwrócić wartość pierwszej litery gdy jest string np kaczka to żeby mi k zwróciło i tak samo z tymi ze środka. I ostatnia rzecz, przy funkcji fscanf w środku używa się "%d" na co to wpływa? Znalazlem tylko że to oddaje wartość całkowitą a "%s" string. Bo chce też tak że jak będzie plik txt a w nim np. Kaczka 2304 Plectropterus Gęś 6344 Malacorhynchus To chcę zapisać to do tablicy dwuwymiarowej ale nie wiem czego użyć żeby rozpoznawalo który wyraz jest skanowany i czy to następna linijka itd. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 12 Maja 2012 Udostępnij Opublikowano 12 Maja 2012 Pokazuje że ma myslnik bo w końcu liczba ujemna też jest liczbą całkowitą :) fscanf wczytuje poformatowany string, czyli jak zauważyłeś %d wczyta liczbe całkowitą. Jeśli chcesz więcej do tablicy dajesz fscanf(string, "%s %d %s") co ci da tablicę pokolei z odpowiednimi danymi. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 12 Maja 2012 Autor Udostępnij Opublikowano 12 Maja 2012 dzięki,a co do myślnika to wszystkie liczby w pliku są dodatnie :| edit: coś jest zrąbane, jak po odczytaniu wszystkim dałem wartość bezwzględną to poucinało kilka cyfer, a każda liczba w pliku ma taką samą długość. I nie wiem co zmienia to "&" przy tablicy edit2: Teraz się skapłem że liczby w pliku wychodzą o jedną cyfre poza zakres inta :D ee itak nie dziala jak dalem double a co do tej tablicy wielowymiarowej to nie dziala, jakbyś ty to zrobil? (jakby trzeba bylo osobne tablice na string i na int itp) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 12 Maja 2012 Udostępnij Opublikowano 12 Maja 2012 & to odwołanie do wskaźnika zmiennej, czyli adresu w pamięci gdzie jest jest przechowywana wartość. W tym przypadku nie używaj wskaźnika, tylko bezpośrednio do tablica Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 12 Maja 2012 Autor Udostępnij Opublikowano 12 Maja 2012 Siedze juz tyle czasu a nie znalazlem nic co by dobrze wczytywalo te pliki, jak juz to całą zawartość wypisuje poprawnie ale nie z osobna w tablicy, a do operacji na stringach z tym zwracaniem liter czego można użyć? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 12 Maja 2012 Administratorzy Udostępnij Opublikowano 12 Maja 2012 tablica[j] ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 12 Maja 2012 Autor Udostępnij Opublikowano 12 Maja 2012 no tak ale najpierw int przed tablica[150][4] np, ja chcialem żeby np dla tablica[2] były stringi edit: Chciałem napisać program który odczyta dane z pliku txt i wpisze je do tablicy. Siedzę już przy tym ponad 4 godziny i ciągle coś jest nie tak. Wczytują się niepoprawne liczby, postanowiłem przed chwilą eksperymentowac na prostych danych wiec zrobilem plik txt z liczbami od 0 do 9 oddzielone enterem i drugi plik z oddzielonymi spacją, ale wszystko ciągle źle się odczytuje :| raz 0 raz -43 raz 4231797, nie mam juz na to nerwów :\ pomóżcie. Program wygląda tak: #include <cstdio> #include <stdlib.h> #include <iostream> using namespace std; int main() { FILE *plik; int nrs[10], i=0; plik=fopen("nrs.txt","r"); if (plik != NULL) { for (i=0;i<10;i++) { fscanf(plik, "%d", &nrs[i]); cout << nrs[i] << endl; } fclose(plik); } else { perror("Nie ma takiego pliku!"); } getchar(); return 0; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
tramur Opublikowano 12 Maja 2012 Udostępnij Opublikowano 12 Maja 2012 Może lepszym rozwiązaniem będzie również wczytywanie danych przez strumienie (fstream), zamiast fscanf. #include <fstream> #include <iostream> #include <string> using namespace std; int main() { fstream plik; plik.open("cotamjest.txt",fstream::in); // otwieramy plik do odczytu string str; while (plik.good()) { //czy z pliku mozna cokolwiek odczytac? plik >> str; //pobieramy slowo cout << str << endl; //wypisujemy je na ekran } return 0; } Poza tym, ujemne liczby mogą wyskakiwać, jeżeli przekroczysz maksymalną wartość inta ze znakiem (int przyjmuje wartości od -2,147,483,648 do 2,147,483,647). możesz spróbować użyć typu unsigned long long zamiast samego int. 2. Zarówno w klasie string, jak i w tablicy charów, pierwszy znak możemy pobrać tak samo jak pobieramy elementy z tablicy, czyli: str[0]. 3. Do przechowywania danych o kilku typach należy użyć struktur: struct zwierze { // deklaracja struktury string nazwa,gatunek; int liczba; }; // ... zwierze z; // tworzenie struktury zwierze.nazwa = "joda"; zwierze.liczba = 19; zwierze.gatunek = "swieconcy"; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 12 Maja 2012 Autor Udostępnij Opublikowano 12 Maja 2012 mógłbyś wyjaśnić to trochę bardziej, jakby miało to dzialac z plikiem w którym jest np 100 różnych zwierząt? A co do tamtego to po częsci problem rozwiązany, odczytuje małę liczby ale jak chce odczytac np 12 liczbowe to nie idzie :| double i long long oddaje nie takie liczby jak trzeba :| Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
tramur Opublikowano 12 Maja 2012 Udostępnij Opublikowano 12 Maja 2012 No na przykład struktura pliku wejściowego wygląda tak: joda 19 swieconcy kapitan 4444 papryka kaczka 1234 gumowa - czyli w jednej linii 3 "słowa" (nazwa, liczba (nie wiem co ona oznacza), gatunek). Kod na wczytanie wszystkiego w jedną tablicę wygląda tak: #include <iostream> #include <fstream> #include <string> using namespace std; struct Zwierze { // deklarujemy strukture string nazwa, gatunek; unsigned long long liczba; }; int main() { Zwierze zwierz[150]; // deklarujemy tablicę 150 zwierząt fstream plik; //przyklad odczytu plik.open("zwierzeta.txt",fstream::in); for (int i=0;i<150 && plik.good();i++) { // wczytujemy po kolei albo 150 zwierząt, albo tyle ile jest w pliku, gdy mniej niz 150. plik >> zwierz[i].nazwa; // wczytujemy najpierw nazwę plik >> zwierz[i].liczba; // teraz liczbę plik >> zwierz[i].gatunek; // i gatunek (wszystko w takiej samej kolejnosci jak w pliku) // przy wczytywaniu danych z pliku w taki sposob, nie ma znaczenia, czy separatorem danych jest odstęp, czy znak nowej linii } // przyklad zapisu cout << zwierz[5].nazwa << " " << zwierz[5].gatunek << endl; // wypisujemy nazwe i gatunek szóstego (bo indeksujemy od 0) zwierzęcia w tablicy (np. "joda swieconcy") return 0; } pisałem to mniej więcej z głowy (mogą być błędy). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 12 Maja 2012 Autor Udostępnij Opublikowano 12 Maja 2012 Wszystko pięknie :) dzięki wielkie! edit: A jak wszytskie dane oddzielone byłyby średniakami? i tylko na końcu kolumny enterem? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 12 Maja 2012 Udostępnij Opublikowano 12 Maja 2012 To rozwiążesz to zadanie maturalne używając Accessa z pakietu Office, ew. Excel. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 13 Maja 2012 Autor Udostępnij Opublikowano 13 Maja 2012 To jest jakieś rąbnięte, teraz chciałem w programie który odczytuje te nr pesel żeby mi ucięło dwie pierwsze liczby więc dałem cout << pesel % 1000000000 << endl; I ucina ale w większości o 1 za dużo a w innych poprawnie ;| edit: aaa bo 0 ucina Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
tramur Opublikowano 13 Maja 2012 Udostępnij Opublikowano 13 Maja 2012 To jest jakieś rąbnięte, teraz chciałem w programie który odczytuje te nr pesel żeby mi ucięło dwie pierwsze liczby więc dałem cout << pesel % 1000000000 << endl; I ucina ale w większości o 1 za dużo a w innych poprawnie ;| edit: aaa bo 0 ucina Nie chcę nic mówić, ale robisz zadanie, które prawdopodobnie trzeba robić w Excelu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Saus Opublikowano 13 Maja 2012 Udostępnij Opublikowano 13 Maja 2012 Tablice przestawne w Accessie / Excelu. Tyle. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się