Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

Co powoduje niewłasciwe działanie programiku

#1
Co powoduje niewłasciwe działanie programiku
Witam wszystkich.
Mam problem z kodem który nie pozwala mi wpisać danych (po wywołaniu funkcji wyszukanie() aplikacja kończy działanie przed funkcją scanf()), jednym słowem niemogę wprowadzić danych do zmiennej tablicowej login[].
Moje pytanie brzmi dlaczego tak się dzieje i co powinno być poprawione w kodzie.
a oto krótki kodzik:
Kod:
#include <stdio.h>
#include <stdlib.h>

int main()
{
   char tab[100];
   FILE *fp;
   int c,i=0;
   fp = freopen( "imie.txt", "r", stdin );
   if( fp != NULL )
   {
       while( (c = fgetchar()) != EOF )
           {

                 if(c=='*')
                 {
                     tab[i+1]='\0';
                     wyszukanie(tab);
                     printf("tab=%s\n",tab);
                 }
                 else
                 {
                   fputchar(c);
                   tab[i]=c;
                   i=i++;
                 }
           }
       fclose( fp );
       printf("**%s",tab);


       return EXIT_SUCCESS;
   }


   return EXIT_FAILURE;
}

int wyszukanie(char tabu[100])
{
   char login[20];
   puts("wprowadz dane do porownania");
   scanf("%s",login);
   printf("tabu=%s\n",tabu);
   if(tabu==login)
   {
       puts("dane sa takie same");
   }
   else
   {
       puts("bledne dane");
   }
}

Wszystkim z góry dziękuję za każdą cenną informacje.
Pozdrawiam
 System operacyjny: windows_seven Przeglądarka: ie
#2
RE: Co powoduje niewłasciwe działanie programiku
(21.04.2015, 13:57)wanhelsing napisał(a): Witam wszystkich.
Mam problem z kodem który nie pozwala mi wpisać danych (po wywołaniu funkcji wyszukanie() aplikacja kończy działanie przed funkcją scanf()), jednym słowem niemogę wprowadzić danych do zmiennej tablicowej login[].
Moje pytanie brzmi dlaczego tak się dzieje i co powinno być poprawione w kodzie.
a oto krótki kodzik:

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

int main()
{
   char tab[100];
   FILE *fp;
   int c,i=0;
   fp = freopen( "imie.txt", "r", stdin );
   if( fp != NULL )
   {
       while( (c = fgetchar()) != EOF )
           {

                 if(c=='*')
                 {
                     tab[i+1]='\0';
                     wyszukanie(tab);
                     printf("tab=%s\n",tab);
                 }
                 else
                 {
                   fputchar(c);
                   tab[i]=c;
                   i=i++;
                 }
           }
       fclose( fp );
       printf("**%s",tab);


       return EXIT_SUCCESS;
   }


   return EXIT_FAILURE;
}

int wyszukanie(char tabu[100])
{
   char login[20];
   puts("wprowadz dane do porownania");
   scanf("%s",login);
   printf("tabu=%s\n",tabu);
   if(tabu==login)
   {
       puts("dane sa takie same");
   }
   else
   {
       puts("bledne dane");
   }
}

Wszystkim z góry dziękuję za każdą cenną informacje.
Pozdrawiam

1) czemu stosujesz freopen?
2) i = i++; kolejny bezsens
3)
Kod:
if(tabu==login)
zawsze będzie false - nie tak porównuje się ciągi znakowe
4) nie możesz wprowadzić danych z klawiatury, bo stosujesz freopen i zamiast stdin masz otwarty plik....
 System operacyjny: windows_seven Przeglądarka: firefox
#3
RE: Co powoduje niewłasciwe działanie programiku
Witam, z jakiego kompilatora korzystasz, bo funkcje fgetchar i fputchar nie należą do biblioteki standardowej (istnieją funkcje fgetc oraz fputc)? Nie rozumiem też, po co korzystasz z funkcji freopen. Poza tym do porównywania łańcuchów tekstowych służy funkcja strcmp z pliku nagłówkowego string.h.
 System operacyjny: linux Przeglądarka: firefox
#4
RE: Co powoduje niewłasciwe działanie programiku
Witam
Wszystkim dziękuje za zainteresowanie.
Szachisto stosowałem kompilator gcc i mingw32-gcc jednak i w jednym w drugim przypadku funkcja scanf nie działa jak powinna.Co do funkcji freopen() to jak to mówią ''Tonący brzytwy się chwyta" a ja kombinowałem na wszystkie sposoby aby przeszukać cały plik pod względem konkretnego wyrazu i stąd zamiast fopen()  funkcja freopen().
Jeszcze muszę sprawdzić czy te funkcje o których pisał Szachista mają podpięte pliki nagłówkowe może w tym leży problem.
Szachisto i Kaszczus dziękuje za zainteresowanie.
A tak na marginesie czym się różnią funkcje fopen() i freopen(), ale tak na chłopski rozum Wesoły.
Pozdrawiam
 System operacyjny: windows_xp_2003 Przeglądarka: opera
#5
RE: Co powoduje niewłasciwe działanie programiku
Funkcja fopen otwiera plik o podanej nazwie w danym trybie, natomiast funkcja freopen spróbuje albo otworzyć plik o podanej nazwie w danym trybie, albo spróbuje otworzyć plik (przekazany w trzecim parametrze) w nowym trybie (podanym w drugim parametrze).
 System operacyjny: linux Przeglądarka: firefox
#6
RE: Co powoduje niewłasciwe działanie programiku
Witam.
Mam dalej problem z działaniem funkcji scanf().
Zmieniłem funkcje freopen() na fopen(), zastosowałem strcpy() do porównania ciągów, sprawdzałem to na kompilatorze gcc i mingw32-gcc, jednak nadal nie mogę prawidłowo wywołać funkcji scanf().
Jest mi ona potrzebna aby wprowadzić do zmiennej tablicowej login[] ciąg znaków który później zostanie porównany z wyrazami rozdzielonymi znakiem '*' w pliku imie.txt.
Co robię źle i jak to powinno wyglądać, i co oznacza zdanie napisane przez Kaczusa "nie możesz wprowadzić danych z klawiatury, bo stosujesz freopen i zamiast stdin masz otwarty plik....".
Pozdrawiam
 System operacyjny: windows_seven Przeglądarka: ie
#7
RE: Co powoduje niewłasciwe działanie programiku
Czy plik, który chcesz otworzyć, istnieje? Bo wygląda na to, że program nawet nie wchodzi do tej funkcji.
Kod:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int wyszukanie(char tabu[100])
{
   char login[20];
   puts("wprowadz dane do porownania");
   scanf("%s",login);
   printf("tabu=%s\n",tabu);
   if(strcmp(tabu, login) == 0)
   {
       puts("dane sa takie same");
   }
   else
   {
       puts("bledne dane");
   }
}

int main()
{
   char tab[100];
   FILE *fp;
   int c,i=0;
//   fp = freopen( NULL, "r", stdin );
   fp = fopen( "imie.txt", "r");
   if( fp != NULL )
   {
       while( (c = fgetc(fp)) != EOF )
           {

                 if(c=='*')
                 {
                     tab[i+1]='\0';
                     wyszukanie(tab);
                     printf("tab=%s\n",tab);
                 }
                 else
                 {
                   fputc(c, fp);
                   tab[i]=c;
                   i=i++;
                 }
           }
       fclose( fp );
       printf("**%s",tab);


       return EXIT_SUCCESS;
   }
   else
      perror("Error");


   return EXIT_FAILURE;
}
 System operacyjny: linux Przeglądarka: firefox
#8
RE: Co powoduje niewłasciwe działanie programiku
Witam.
Szachisto dziękuję ci bardzo za zainteresowanie, oczywiście plik imie.txt jest, dziś jeszcze raz to sprawdziłem i zawiera dane. Po zmianach wprowadzonych przez ciebie scanf() zaczął działąć ale wprowadzając dane po wciśnięciu ENTER'a funkcja nie kończy działania. Wczoraj udało mi się też wprowadzić znaki ale nie mogłem zakończyć jej działania. I jedno co zauważyłem Szachista funkcje wyszukiwanie() umieścił przed funkcją main().
Czy tak jak zrobiłem ja jest błędem.
Pozdrawiam
 System operacyjny: windows_seven Przeglądarka: ie
#9
RE: Co powoduje niewłasciwe działanie programiku
Pytanie dodatkowe, jak kończy pracę? i jak uruchamiasz, bo może działa prawidłowo, tylko zamyka okno shella?
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#10
RE: Co powoduje niewłasciwe działanie programiku
Witam
Okno shella nie jest zamykane.Teraz program wchodzi do funkcji wyszukiwanie bo widac napis "wprowadź dane do porównania" ale kiedy wprowadzam dane to jak długo bym nie pisał program nie powraca do funkcji main() aby zbadać kolejne stringi umieszczone w pliku.
Wczoraj na krótko przypisałem do zmiennej tablicowej dane login[]="dane",i odziwo program działał jak należy.Ale chciał bym móc dane wprowadzać z klawiatury a nie przypisywać na stałe do tablicy login[], bo w programie który chce napisać nie ma to sensu.
Pozdrawiam.
 System operacyjny: windows_xp_2003 Przeglądarka: opera
Programy: Polecane / Nowe / Inne




Podobne wątki (Co powoduje niewłasciwe działanie programiku)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  [C++] Działanie na tablicy znakowej saba13579 8 9572 21.03.2017, 22:30
Ostatni post: Szachista
Question [VB 2010] inny program zakończy działanie i zwróci kod, a następnie uruchomi kolejny daniodudis 8 1875 10.01.2015, 19:28
Ostatni post: Szachista
  [Java, LWJGL] Błędne działanie funkcji glDrawPixels w zalezności od systemu operacyjnego Szachista 3 2477 23.09.2013, 08:35
Ostatni post: Szachista

Skocz do: