[C] Odczyt z pliku i zmiana tekstu w nim.

kolendus
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 16 lis 2016, o 18:36
Płeć: Mężczyzna
Lokalizacja: Warszawa

[C] Odczyt z pliku i zmiana tekstu w nim.

Post autor: kolendus »

Witam!
Czytam ANSI C Briana W. Kernighana oraz Dennisa M.Ritchie'go.
Zacząłem czytać o funkcjach sczytującej znak wejścia i wymyśliłem sobie zadanie ,którego nie potrafie zrobić.

Programuje w Visual Editorze.

Stworzyłem plik dane.4 w którym umieściłem 3 napisy w oddzielnych liniach.Pomiędzy niektórymi wyrazami było po kilkanaście spacji. Chciałem aby program sczytał dane z tego pliku , przy napotkaniu spacji szedł dalej ,aż napotka znak. Potem wstawił spacje i znowu wstawiał znaki. W wyniku czego powstałby plik z napisami oddzielony jedną spacją. Nie wychodziło mi z operacją na tym samym to chciałem żeby znaki wsadzało do tablicy charów, ale juz tutaj mam probłem bo gdy próbuje zobaczyc printfem co jest w tej tablicy, wyskakują mi jakieś kwadraciki.
Oto mój kod:

Kod: Zaznacz cały

#include<stdio.h>

int main(int argc, char *argv[])

{
        FILE *in = argc > 1 && argc < 3  ? fopen(argv[1], "r") : NULL;

        int a,b,c;
        c = 0;
        char tab[10000];
        tab[10000] = getc(in);

        if(argv[1] == NULL){
        fprintf( stderr, " Nie moge czytać tego pliku");
        }

        while( tab[c] != EOF){
                tab[c] = getc(in); // zakładam że tutaj jest coś zle, chociaż nie wiem co :/
                c++;
                }
        for(b = 0; b < ; b++)
        {
        printf("%c", tab[b]); // tutaj wypisuje mi kwadraty
        }

return 0;
}
 
Plik z napisami nazywa sie dane.4 i jest w nim coś takiego:

Kod: Zaznacz cały

Mlotek      tablica
Kartofel         laptop
Jarosław        antylopa
Ostatnio zmieniony 16 lis 2016, o 20:24 przez Afish, łącznie zmieniany 1 raz.
Powód: Używaj tagów code.
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C] Odczyt z pliku i zmiana tekstu w nim.

Post autor: kalwi »

Czytam ANSI C Briana W. Kernighana oraz Dennisa M.Ritchie'go
Czytasz książkę opisującą język C z roku 1988, podczas gdy najnowszy standard to 2011. Gratulacje.
Programuje w Visual Editorze.
Pierwsze słyszę. Jaka firma to tworzy?

Kod: Zaznacz cały

#include<stdio.h>
Brak spacji
liniach.Pomiędzy
Po kropce jest spacja
tego pliku , przy
Przed przecinkiem nie ma spacji

Kod: Zaznacz cały

 FILE *in
Cóż niby oznacza in? Stosuj nazwy, które coś mówią. Np. fp, czyli file pointer

Kod: Zaznacz cały

int a,b,c;
Zmienna a nigdzie nie jest wykorzystana

Kod: Zaznacz cały

if(argv[1] == NULL)
argv[1] --> in
"Nie moge czytać tego pliku"
1) odczytać
2) nie używaj polskich znaków w C

Kod: Zaznacz cały

tab[10000] = getc(in);
To jest bez sensu
Poza tym preferowana funkcja to fgetc

Kod: Zaznacz cały

for(b = 0; b < ; b++)
Tu jest źle
ale juz tutaj mam probłem bo gdy próbuje zobaczyc printfem co jest w tej tablicy, wyskakują mi jakieś kwadraciki
To jest w pamięci, więc printf to wyświetla. Działa zgodnie z tym, co napisałeś.

I naucz się formatować kod

Kod: Zaznacz cały

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

int main(int argc, char *argv[])
{
	FILE *fp = argc > 1 && argc < 3 ? fopen(argv[1], "r") : NULL;

	if(fp == NULL)
	{
		fprintf( stderr, "Nie moge odczytac tego pliku");
		exit(EXIT_FAILURE);
	}	

	size_t count = 0;
	char tab[10000];
	tab[0] = fgetc(fp);

	while(tab[count] != EOF)
		tab[++count] = fgetc(fp);

	for(int i = 0; i < count; ++i)
		printf("%c", tab[i]);

	return 0;
}
kolendus
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 16 lis 2016, o 18:36
Płeć: Mężczyzna
Lokalizacja: Warszawa

[C] Odczyt z pliku i zmiana tekstu w nim.

Post autor: kolendus »

Czytam tę książkę, gdyż mam język C na pierwszym roku i wykładowca kazał nam go opanować ( wskazał na tę książkę). Studiuje na Politechnice Warszawskiej. Przepraszam za tak niechlujnie wklejony kod, popędziłem z frustracją i chciałem szybciej uzyskać odpowiedż. Napisałem visual editor, bo tak u mnie wszyscy to nazywają. Używamy programu PuTTY do łączenia się z serwerem, na którym piszemy programy na własnym koncie. Wcześniej w tej pętli

Kod: Zaznacz cały

for(b = 0; b < ; b++)
dałem warunek b != EOF, ale nie działało i chciałem zmienić ,ale najwidoczniej zostawiłem puste.

Zacząłem kontynuować to co poprawiłeś. Udało mi się zrobić tak, że otwiera gotowy plik pusty i wsadza tam zdanie bez spacji.
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C] Odczyt z pliku i zmiana tekstu w nim.

Post autor: kalwi »

( wskazał na tę książkę)
No to źle wskazał. Ta książka jest dobrze napisana, ale jest przestarzała. Tak na dobrą sprawę po polsku nie ma za bardzo dobrej książki do C.
Studiuje na Politechnice Warszawskiej
Który wydział?
kolendus
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 16 lis 2016, o 18:36
Płeć: Mężczyzna
Lokalizacja: Warszawa

[C] Odczyt z pliku i zmiana tekstu w nim.

Post autor: kolendus »

Wydział Elektryczny.

Wskazał i kazał przerobić całą. Nawet ćwiczeniowiec od programowania powiedział , że kazać nam w starym C i w PuTTY programować to jak znęcać się nad inwalidą.
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C] Odczyt z pliku i zmiana tekstu w nim.

Post autor: kalwi »

Największą różnicą to w sumie jest brak VLA w c89 i zabawa ze wskaźnikami.. kretynizm.
ODPOWIEDZ