Ahoj, už den si lámu hlavu s tím, jak syntakticky zapsat problém v nadpisu:
Potřebuji ze standartního vstupu do dynamicky alokovanýho pole zapsat libovolně velkej vstup , ale vždy obdélníkovej, konec se značí feof stdinem. (V semestrálce takto musím zadat obdélníkové bludiště) Napsal jsem tohle, dělám to až teď do šesti do rána, a už fakt nevím, poradíte prosím někdo?
Aktuálně to dělá to, že po zadání prvního řádku, to šahá kam nemá a hodí to error...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define OUT_OF_MEMORY -3
#define S_EOF -2
#define INVALID_INPUT -1
#define OK 0
int read_row(int *needed_cols, char *b_row[]) {
char ch, last='0';
int i,n;
i = 0;
if (!*needed_cols) *needed_cols=3;
printf("needed_cols: %d", *needed_cols);
b_row = (char **) malloc ( sizeof ( *b_row ) * (*needed_cols) );
if (! *b_row) return (OUT_OF_MEMORY);
//ch = getchar();
while (((last != "\n") || (last != EOF)) && (scanf("%c",&ch)==1)) {
if ((*needed_cols) && (i >= *needed_cols)) {
return (INVALID_INPUT);
}
printf("ch: %c", ch);
if (i == *needed_cols) {
*needed_cols = (int)((*needed_cols) * 1.5);
b_row = (char*) realloc(*b_row, sizeof ( *b_row) * (*needed_cols));
}
b_row[i] = ch;
last=ch;
i++;
//scanf("%c",&ch);
}
if ((*needed_cols) && (i != *needed_cols)) {
return (INVALID_INPUT);
}
if (ch == EOF) {
return (S_EOF);
}
*needed_cols = i;
return (OK);
}
void alokuj_pole(int n, char *** pole)
{
*pole = (char**) malloc ( sizeof ( *pole ) * n );
}
void realokuj_pole(float n, float pomer, char *pole[])
{
n = (int)(n * pomer);
pole = (char**) realloc(pole, sizeof ( *pole) * n);
}
int main(int argc, char** argv) {
int velikost, i, i2, i3, vystup, needed_cols, last_needed_cols;
char ** matice;
velikost=10;
needed_cols=0;
//matice = (char *) malloc ( sizeof matice * velikost );
alokuj_pole(velikost, &matice);
i=0;
printf("Zadejte bludiste:\n");
while (vystup!=S_EOF || vystup!=INVALID_INPUT || vystup!=OUT_OF_MEMORY)
{
printf("Tohle probehlo: %d\n", i);
vystup=read_row(&needed_cols, &matice[i]);
last_needed_cols=needed_cols;
printf("matice polozka: %c\n", &matice[i]);
if (i==velikost) realokuj_pole(i, 2, matice);
i++;
}
if (vystup==INVALID_INPUT || vystup==OUT_OF_MEMORY)
printf("Nespravny vstup");
else if (vystup==S_EOF)
for(i2=0;i2<=i;i2++)
{
for(i3=0;i3<=last_needed_cols;i3++)
printf("%c", matice[i2][i3]);
printf(" \n");
}
}