Problem z funkcją scanf, zbyt mało danych na jeden raz

0

Witam, mam następujące zadanko:

Napisz program, który będzie pobierał od użytkownika liczby całkowite, aż do wprowadzenia liczby 0 i zapisywał je do plików tekstowych, w następujący sposób:

do pliku 2.txt wszystkie liczby podzielne przez 2,
do pliku 3.txt podzielne przez 3,
do pliku 5.txt podzielne przez 5,
a do pliku 0.txt pozostałe.
Każda liczba ma znajdować się w nowym wierszu.

Jeżeli operacje tworzenia któregoś z plików nie powiedzie się, program powinien wyświetlić komunikat Couldn't create file i zakończyć działanie z kodem błędu 5.

W przypadku sukcesu program powinien wyświetlić komunikat Files saved i zwrócić wartość 0.

Wszystko chyba działa, tylko problem jest w momencie gdy test automatyczny próbuje podać zbyt dużo danych na raz(ok 6500 znaków), jak policzyłem do konsoli mogę maksymalnie wkleić około 4094 znaków na raz, jak to naprawić żeby dało się wpisać większą ilość danych na raz?

Mój kod:

#include <stdio.h>
#include <stdlib.h>

int main() {

	int liczba = 1;
	FILE *fp, *fp2, *fp3, *fp5;
	if ((fp2 = fopen("2.txt", "a")) == NULL) {
		printf("couldn't create file");
		exit(5);
	}
	if ((fp3 = fopen("3.txt", "a")) == NULL) {
		printf("couldn't create file");
		fclose(fp2);
		exit(5);
	}
	if ((fp5 = fopen("5.txt", "a")) == NULL) {
		printf("couldn't create file");
		fclose(fp2);
		fclose(fp3);
		exit(5);
	}
	if ((fp = fopen("0.txt", "a")) == NULL) {
		printf("couldn't create file");
		fclose(fp2);
		fclose(fp3);
		fclose(fp5);
		exit(5);
	}
	printf("Podaj liczby:\n");
	while (liczba != 0) {
		scanf("%d", &liczba);
		if (liczba == 0) {
			printf("Files saved");
			break;
		}
		if (liczba % 2 == 0 && liczba % 3 == 0 && liczba % 5 == 0) {
			fprintf(fp2, "%d\n", liczba);
			fprintf(fp3, "%d\n", liczba);
			fprintf(fp5, "%d\n", liczba);
		}
		else if (liczba % 2 == 0 && liczba % 3 == 0) {
			fprintf(fp2, "%d\n", liczba);
			fprintf(fp3, "%d\n", liczba);
		}
		else if (liczba % 3 == 0 && liczba % 5 == 0) {
			fprintf(fp3, "%d\n", liczba);
			fprintf(fp5, "%d\n", liczba);
		}
		else if (liczba % 2 == 0 && liczba % 5 == 0) {
			fprintf(fp2, "%d\n", liczba);
			fprintf(fp5, "%d\n", liczba);
		}
		else if (liczba % 2 == 0) {
			fprintf(fp2, "%d\n", liczba);
		}
		else if (liczba % 3 == 0) {
			fprintf(fp3, "%d\n", liczba);
		}
		else if (liczba % 5 == 0) {
			fprintf(fp5, "%d\n", liczba);
		}
		else {
			fprintf(fp, "%d\n", liczba);
		}

	}
	fclose(fp);
	fclose(fp2);
	fclose(fp3);
	fclose(fp5);
	return 0;
}

0

Po co wklejasz do konsoli?
Spróbuj te liczby czytać po prostu z pliku.
https://www.programmingsimplified.com/c-program-read-file

0

Wklejam z konsoli bo zadanie tego wymaga, dane są pobierane od użytkownika

0

Jak przekierujesz stream z pliku ./program < plik_z_liczbami to też jest taki efekt?

0

Dane są generowane losowo przez test automatyczny do konsoli
Program jest wywoływany
./main 0 więc z tego co widzę nie ma tu żadnego pliku z danymi

0

Nie pytam jak wywołujesz, tylko czy jest taki sam efekt jak zrobisz to inaczej.

0

Tylko ja nie mam żadnego pliku z liczbami wejściowymi, test generuje te dane i je wpisuje w konsole, jednorazowo podał mi teraz 6500 znaków i dopiero klepnął enter, jak skopiowałem te dane to do konsoli mogę podać maksymalnie 4094 znaków na raz i tu mam problem

0
Rajvi napisał(a):

Tylko ja nie mam żadnego pliku z liczbami wejściowymi, test generuje te dane i je wpisuje w konsole, jednorazowo podał mi teraz 6500 znaków i dopiero klepnął enter, jak skopiowałem te dane to do konsoli mogę podać maksymalnie 4094 znaków na raz i tu mam problem

tak, ale co za problem zmienić test tak by działało?
ustawić max na 4000, lub generować te liczby do pliku ....

0

To jest program na zajęcia, nie jestem autorem tego testu

0

Jak to jest tester automatyczny to w jaki sposób ręcznie przeklejasz do konsoli? Coś mieszasz.

0

Przepraszam, test maszynowy ale to chyba to samo. Wklejam swój plik main.c czy jak sobie go nazwę na stronkę i ona sprawdza wszystko, dostaję raport i widzę co ten test chciał zrobić
screenshot-20190521160716.png
screenshot-20190521160727.png
Skopiowałem te dane co on mi chciał wkleić do konsoli:
screenshot-20190521160825.png
I porównałem je, do konsoli wkleiłem 4094 znaków a test chciał ich wpisać 6411

0

Zobacz ustawienia bufora konsoli. Poza tym, dlaczego nie wkleisz danych do pliku i przekierujesz stdin, tak jak sugerowałem?

1

Skąd w ogóle pomysł że to wina ograniczenia Twojego terminala powoduje wywalenie się testu na stronie?

0

Podejrzewam, że to wina scanf, że nie może przyjąć więcej danych.

2

Źle podejrzewasz. Dostałeś już rady co robić, na razie je dzielnie ignorujesz.

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