na vstupu mam tyto hodnoty:
3 4 //radky a sloupce
1 2 3 4 3 2 1 //hodnoty matice
2 3 4 5 4 3 2
3 4 5 10 5 4 3
2 3 4 5 4 3 2
1 2 3 4 3 2 1
jak mam nacist urcity pocet hodnot z radku a pak prejit na druhy radek, abych zbyvajici hodnoty z prvniho radku zahodil?
potrebuju matici oriznout takhle:
1 2 3 4
2 3 4 5
3 4 5 10
Fórum › C / C++
Vstup matice
muzes nacist cely radek pomoci funkce(metody objektu cin) getline, a pote z takoveho retezce nacist m promennych, kde m je sirka matice; a presunout se na dalsi radek (opetovnym getlinem...)
JESTE JEDEN DOTAZ:
kdyz nacitam hodnoty ze souboru,
potrebuju ulozit a napsat na vystup jen jeden radek.
davam:
while (scanf("%i", & vstup) != '\n') // s EOF to funguje
printf("%i ", vstup);
ale nejede mi to :-(
To Kuba-$ : nejede ti to z jednoho duvodu: scanf("%i") nacte cele cislo, zatimco '\n' je znak.
reseni je prekvapive NAPROSTO stejne jako v minulem pripade. opet getline - treti parametr getline je totiz ukazatel na soubor...
pokud by si chtel, muzes to cele cist po znacich ("%c"), ale takto je to (podle me) snazsi.
To Smurffy : ??? omlouvam se ale toto reseni problemu skutecne nechapu.
To tmi : Dík, zkusím to. Snad to tak budu moci udelat. Mame totiz ve funkcich ruzna omezeni. Mimochodem. jde to taky pres fgets() ? Zda se mi to podobne, tyto 2 funkce.
Abych to lepe pochopil,jak to mam naprogramovat,predvedu kousek kodu:
#define MAX 1000
char str[MAX];
int pole[MAX];
int cislo;
while (fgets(str, MAX, soubor) != NULL) {
for (int i = 0, i < MAX, i++) {
while (str[i] != '\n' && str[i] != '\t') {
cislo = cislo * 10 + str[i];
}
pole[i] = cislo;
}
}
Pochopil jsem to dobre? je to takhle spravne?
getline a fgets jsou docela podobne, myslim ze rozdil je treba v tom ze fgets vraci ukazatel na polozku do ktere nacitalo a getline vraci pocet prectenych bytu...
pochopil jsi to spravne, ale jako podminku v druhem cyklu while (pozn: ten while by se ti zacyklil, je tam potreba misto i pouzivat nejakou jinou promennou, kterou v kazdem kroku inkrementujes) bych radeji pouzil (str[i]>='0' && str[i]<='9'), je to bezbecnejsi.
ovsem existuje jeste jednodussi vec, funkce int atoi(const char * S) deklarovana v stdlib.h, ktera svuj parametr, znakovy retezec, prevede na cislo.
tedy tvuj kod by se mohl smrsknout na:
#include <stdlib.h>
#define MAX 1000
char str[MAX];
int pole[MAX];
int i=0;
while (fgets(str, MAX, soubor) != NULL && i<MAX){
pole[i++] = atoi(str);
}
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Matice - inverzní matice — založil Mara
Moderátoři diskuze