Twoje PC  
Zarejestruj się na Twoje PC
TwojePC.pl | PC | Komputery, nowe technologie, recenzje, testy
B O A R D
   » Board
 » Zadaj pytanie
 » Archiwum
 » Szukaj
 » Stylizacja

 
M E N U
  0
 » Nowości
0
 » Archiwum
0
 » Recenzje / Testy
0
 » Board
0
 » Rejestracja
0
0
 
Szukaj @ TwojePC
 

w Newsach i na Boardzie
 
OBECNI NA TPC
 
 » PeKa 15:59
 » zgf1 15:57
 » KHot 15:55
 » Wedrowiec 15:52
 » Druzil 15:50
 » matali 15:50
 » Sherif 15:49
 » Mms 15:49
 » 247 15:43
 » malyy 15:37
 » Robek 15:31
 » Kenny 15:24
 » Dexter 15:22
 » jablo 15:18
 » PaKu 15:09
 » Bonifacyz 14:59
 » Liu CAs 14:48
 » rookie 14:45
 » Syzyf 14:44
 » burz 14:34

 Dzisiaj przeczytano
 48676 postów,
 wczoraj 61370

 Szybkie ładowanie
 jest:
włączone.

 
ccc
TwojePC.pl © 2001 - 2026
A R C H I W A L N A   W I A D O M O Ś Ć
    

RE: programowanie w ANSI C - program , xan 18/05/03 20:28
Wczoraj mi sie troche pokrecilo ale dzisiaj na trzezwo poszlo.
To jest najprostszy sposob jaki mozna wymyslic. No i w standarcie ANSI C :))

# include <stdio.h>

main()
{
FILE *infile, *outfile;
char bufor[81]= \"xx\";
int i;
char litera1, litera2;

printf(\"podaj litere do zamiany\\n\");
scanf(\"%c\",&litera1);
printf(\"podaj litere ktora chcesz wstawic\\n\");
scanf(\"%c\",&litera2);

infile = fopen(\"c:\\\\in.txt\",\"r\");
outfile = fopen(\"c:\\\\out.txt\",\"a+\");
while (fgets(bufor,80, infile) !=NULL)
{ for(i=0; i<81; i++)
{
if (bufor[i] == litera1) bufor[i]=litera2;
}
fputs(bufor,outfile);
}
fclose(infile);
fclose(outfile);
}

Nie mogę wam pomóc .. jestem pasikonikiem

  1. dziękuje bardzo :-) , Magnus 18/05/03 20:31
    dzięki że ci sie chcialo zaraz sprawdzam.

  2. ups ups , xan 18/05/03 20:32
    poprawka
    cos mi tu powstawialo niepotrzebnego :). Teraz jest dobrze

    # include <stdio.h>

    main()
    {
    FILE *infile, *outfile;
    char bufor[81]= "xx";
    int i;
    char litera1, litera2;

    printf("podaj litere do zamiany\n");
    scanf("%c",&litera1);
    printf("podaj litere ktora chcesz wstawic\n");
    scanf("%c",&litera2);

    infile = fopen("c:\\in.txt","r");
    outfile = fopen("c:\\out.txt","a+");
    while (fgets(bufor,80, infile) !=NULL)
    { for(i=0; i<81; i++)
    {
    if (bufor[i] == litera1) bufor[i]=litera2;
    }
    fputs(bufor,outfile);
    }
    fclose(infile);
    fclose(outfile);
    }

    gdyby znowu cos potentegowalo poprawki prosze we wlasnym zakresie :)

    Nie mogę wam pomóc .. jestem pasikonikiem

    1. mały problemik , Magnus 18/05/03 20:46
      nie moge podać drugiej litery. Wypisuje komunkiat podaj lit ktora chcesz wstawic i odrazu przechodzi do dzialania. efekt jest taki że wycina litere. np ze slowa kot zostaje ot.
      Aha kompiluje pod linuxem przez gcc

  3. wooow, a co to robi? , bwana 18/05/03 20:39
    no dobra, cos tam pamietam.

    mozna prosciej:

    funkcja char mapuj(char) zwracajaca znak zastepujacy na podstawie zastepowanego.

    i petla konwertujaca:

    while (znak=fgetc(...))
    fputc(mapuj(znak))

    jesli chodzi o buforowanie, to korzystanie z fopen, fclose i funkcji fgetxxxx oraz innych bazujacych na deskryptorze FILE ma to juz wbudowane. Jesli ktos zamierza implementowac wlasne buforowanie, powinnien skorzystac z funkcji open, close, read (bez 'f' na poczatku) odwolujacych sie do uchwytow (file handles) plus dodac wlasny mechanizm buforujacy. inaczej nie ma to wiekszego sensu, a moze obnizyc wydajnosc (czyli na przekor buforowaniu pogorszyc zamiast polepszyc program).
    Wczytywanie tych 80 znakow mialoby sens np, gdyby funkcja konwertujaca potrzebowala wiecej niz pojedynczego znaku do zwrocenia wartosci, ale kiedy wyglada ona tak, ze zwraca "znak za znak" to pisanie w ten sposob programu jest niecelowe.

    ponadto calos mozna bylo napisac na standardowym wyjsciu i wejsciu i skorzystac z przekierowania, np. wykonywac program tak:

    program.exe < plik_we.txt >plik_wy.txt

    ale, jak rozumiem, otwieranie i zamykanie plikow bylo elementem cwiczenia.

    "you don't need your smile when I cut
    your throat"

    1. oczywiscie zapomnielismy o kontroli bledow , bwana 18/05/03 20:48
      kazda operacja na plikach przy uzyciu stdio.h powinna byc przetestowana, i tak:

      - przy otwieraniu pliku fopen wynik != NULL oznacza blad otwarcia pliku, nalezy to sprawdzic
      - sprawdzenie poprawnosci odczytu nie powinno byc sprawdzane prawdziwoscia wyrazenia fgets, tylko wyrazenie fgets != EOF (oba sposoby dzialaja, bo EOF ma w wiekszosci implementacji wartosc bodaj -1, ale to EOF powinno sie uzywac, dla zgodnosci ze standardem)
      - zapomniales o wstawieniu null na koniec tablicy bufor, funkcja fputs moze zglupiec
      - zamkniecie pliku - tez trzeba sprawdzic czy nastapilo bez bledow (nie pamietam juz co powinno zwrocic)

      Ogolna rada: poszukaj opisu funkcji biblioteki stdio, sprawdz, jakie argumenty nalezy do niej podawac i jak sprawdzac poprawnosc ich wykonania. Ksiazka "ANSI C" Ritchiego i Kerrnighama (nie pamietam dokladnie pisowni nazwisk) ma to wszystko i jest naprawde niezla jesli chodzi o nauke programowania w C.

      "you don't need your smile when I cut
      your throat"

  4. Ojej , Soulburner 18/05/03 20:47
    Ja chcę się za programowanie wziąć, a nic z tego nie rozumiem! Znam się tylko na Basic'u, jeszcze z czasów C64 ;)

    You must gather your party before
    venturing forth.

  5. małe pytanko , RaPToRR 18/05/03 21:35
    czy scanf robi to samo co getchar() lub getche()? I czy lepiej jest stosować printf czy cout? :)

    http://www.krzysztofwasko.pl

    1. scanf to o wiele bardziej zlozona funkcja, tzw. formatowane wejscie , bwana 18/05/03 22:17
      natomiast getc (fgetc) pobiera po prostu jeden znak. co do printf i obiektu cout, to

      - printf jest dostepny i w C i w C++
      - obiekt cout wymaga C++ (to obiekt pochodny od ostream)

      w C++ zaleca sie uzywanie cin, cout (sa wydajniejsze, bo nie nastepuje zadne parsowanie ciagu formatujacego jak w przypadku printf/scanf/fprintf etc.) - obiekty te stworzone sa specjalnie dla C++

      o ile pamietam, nie wolno przeplatac uzycia printf i cout gdyz moze dojsc do resynchronizacji operacji we/wy, np program:

      printf("a");
      cout << "b";
      printf("c");

      moze dac w wyniku "bac" lub "acb" zamiast spodziewanego "abc" - wynika to z roznic w implementacji buforowania obu metod (sa niezalezne). pisze to z pamieci, ale mam niemal stuprocentowa pewnosc ze tak jest. Boziu, jak to bylo dawno:)

      "you don't need your smile when I cut
      your throat"

      1. thanks , RaPToRR 18/05/03 22:20
        kolego/kolezanko ;P

        http://www.krzysztofwasko.pl

    
All rights reserved ® Copyright and Design 2001-2026, TwojePC.PL