swee [ Gunslinger ]
[C++] Odczyt liczby z gUpiego pliku
Problem polega na tym, żeby z pliku .txt przeczytać liczba po liczbie i zapisać je do tablicy dwuwymiarowej. Wszystko ok, ale plik wygląda na przykład tak:
8 8 8 8 8
10 10 10 10 10
11 11 11 11 11
I jak tutaj ustawić pętlę żeby czytała liczbami a nie wersami? Można założyć, że wiemy ile jest wierszy i kolumn w pliku tekstowym.
na zaś [ Konsul ]
oddzielaj liczby od znaku " ".
odpowiednik explode w php?:)
Regis [ ]
Przeciez zwykly cin wczyta Ci to w ten sposob, jesli tylko przekierujesz standardowe wejscie na niego.
swee [ Gunslinger ]
Jakieś sugestie zapisu? Wersami sobie lecę tak:
ifstream plik("obraz.txt");
int licznik=0;
string wers[100];
while(getline(plik, wers[licznik]))
‹
cout<<wers[licznik]<<endl;
licznik++;
›
Standardowo › to wąsiaste nawiasy
QrKo_ [ ]
Skoro mozna zalozyc ile jest wierszy i kolumn to zakladam ze mozna rowniez zalozyc ile jest konkretnie liczb, wtedy:
#include <iostream>
#include <fstream>
using namespace std;
int main()
‹
int *tab;
int ilosc_liczb;
ifstream plik ("plik.txt");
plik >> ilosc_liczb;
tab = new int[ilosc_liczb];
for(int i=0; i<ilosc_liczb ; i++)
‹
plik >> tab[I];
cout << tab[I];
›
system("PAUSE");
›
A plik.txt wyglada tak:
15
8 8 8 8 8
10 10 10 10 10
11 11 11 11 11
Dynamiczna tablica utworzona na tyle liczb ile potrzeba + petelka wstawiajaca po kolei liczby i przy okazji wypisujaca je.
swee [ Gunslinger ]
A wiesz, że działa? ;) Dzięki wielkie.
To niestety nie jest koniec programu, idę bić się dalej.
swee [ Gunslinger ]
Dobra, jestem już na końcu mojego programu. Problem pojawił się znowu w banalnej rzeczy, tym razem dziad nie chce progować tej tablicy. Ma to wyglądać, że znajduje maksymalną wartość z pliku tekstowego, dzieli go na 2 i potem sprawdza każdą wartość z tablicy: jeśli jest większa od połówki to zamienia ją na 1, jeśli mniejsza to na 0. No i co? No i nie działa. Doszedłem do takiego czegoś:
#include<iostream>
#include<fstream>
#include<stdio.h>
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include<sstream>
#include <string.h>
#include <stdlib.h>
using namespace std;
int main()
‹
int *tab;
int ilosc_liczb;
double m=0;
int z1;
float s;
int j;
double ss;
int zero=0;
int jeden=1;
ifstream plik ("test2.txt");
plik >> ilosc_liczb;
tab = new int[10];
for(int i=0; i<10 ; i++)
‹
plik >> tab;
z1=(tab);
cout << z1 << endl;
if(m<tab)
‹
m = tab;
›
›
printf("\n");
printf("Najwieksza wartost %g", m);
printf("\n");
s = m/2;
ss = static_cast<int>(s);
printf("Srodek zakresu %g",ss);
printf("\n");
for(j=0; j<10 ; j++)
‹
if (tab[j]<s)
‹
tab[j]=0;
printf("%g",tab[j]);
›
printf("%g",tab[j]);
printf("\n");
›
system("PAUSE");
›
Wyświetla, połówki zamiast każdej liczby, podwójne wartości pokazuje przy liczbach mniejszych od połówki.
Plik .txt na jakim pracuje to
255 255 255 255 255 255 100 100 200 100 100
(istotne jest, żeby miał 11 liczb)
swee [ Gunslinger ]
Drobne poprawki wprowadzone, ale dalej nie chce działać poprawnie
#include<iostream>
#include<fstream>
#include<stdio.h>
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include<sstream>
#include <string.h>
#include <stdlib.h>
using namespace std;
int main()
int *tab;
int ilosc_liczb;
double m=0;
int z1;
float s;
int j;
double ss;
int zero=0;
int jeden=1;
int tab2[10];
int k=1;
ifstream plik ("test2.txt");
plik >> ilosc_liczb;
tab = new int[10];
for(int i=0; i<10 ; i++)
plik >> tab;
z1=(tab);
cout << z1 << endl;
if(m<tab)
m = tab;
printf("\n");
printf("Najwieksza wartosc %g", m);
printf("\n");
s = m/2;
ss = static_cast<int>(s);
printf("Srodek zakresu %g",ss);
printf("\n");
printf("\n");
for(j=0; j<10 ; j++)
if (tab[j]<ss)
printf("0");
tab2[j]=0;
if (tab[j]>ss)
printf("1");
tab2[j]=1;
//printf("%g",tab[j]);
printf("\n");
printf("\n");
for (k=1; k<10; k++)
printf("%g", tab2[k]);
printf("\n");
system("PAUSE");
Zobaczcie co robi: najpierw faktycznie znajduje liczby większe i mniejsze ale już ich nie zapisuje do tab2, bo gdy na końcu ją wyświetlam to wypisuje 127 czyli środek zakresu.
Pomocy!
na zaś [ Konsul ]
zdecydowanie to polecam Ci wkleic kod na dpaste.com i zapodać link, bo gol po prostu kastruje kod. usuwa formatowanie, zamienia nawiasy i zamienia [i ] na pochylenie:)
swee [ Gunslinger ]
już wiem co miałem źle, pisałem %g, zamiast %d... Głupi ten c++ jest ;)
Ale dzięki, pewnie jeszcze kilka razy napiszę co z tym programem jest nie tak.
swee [ Gunslinger ]
Już jest git, został ostatni punkt programu: program ma stworzyć nowy plik .txt już z zamienionymi wartościami
było
255 255 255 100 255
255 176 255 100 255
ma być
1 1 1 0 1
1 0 1 0 1
Potrafię to zrobić jeśli chodzi o jeden wiersz, ale tu będziemy mieli 2 i więcej. Muszę zrobić więc jakiś tegesik który policzy ile jest wartości w jednym wierszu, czyli co ile liczb pojawia się "\n". Znalazłem coś takiego jak data.peek ale nie mam pojęcia jak tego dziada użyć.
kod:
swee [ Gunslinger ]
up dla ludzi dobrej woli