Problem z przekazywaniem tablicy

0

Witam,
Jako, że raczkuje w c mam problem z przekazaniem tablicy m do funkcji sprawdz. Przekazuje mi tylko pierwszy znak;/

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include <string.h>
int sprawdz(char x[], char napis[]){
    int dlugosc=strlen(napis);
    int i;
    for (i=0;i<=(dlugosc-1);i++)
    {   printf("%c",x[i]);
        if (x[i]=='-') return 1;
        else return 0;
        
        }  
}

int main(){
  
   srand(time(NULL)); 
   char tab[10];
   char *t[10],*t1[6];
   char m[50];
   int kolo[15]={400,250,200,100,150,300,350,50,0,10,20,500,80,120,260};
   char napis[50];
     char napis1[50];
   int i;
   int los1=(rand() % 15);
   int wylosowany=kolo[los1];
   printf("Pkt do zdobycia= %d\n",wylosowany);
   FILE* plik = 0;
   FILE* plik1 = 0;
   plik1 = fopen( "miejsca.txt", "r" );
                        los1=(rand() % 5);
                        for (i = 0; i <= los1; i++){
                        t1[i] = fgets (napis, 50, plik1);
                        }
   fclose(plik);
                        for (i = 0; i <=strlen(napis) ; i++){
                            if((napis[i]>='A') && (napis[i]<='Z'))
                                             m[i]='-';
                            else m[i]=' ';                 
                        printf("%c",m[i]);
                        }
                        
char sp; 
int wyniczek=0;
int xx=0;
int dl=strlen(napis);
char wybior;
char sa;

int spr;




printf("\nPodaj spolgloske= ");
  
     scanf("%c",&sp);
 

                        for (i = 0; i <=strlen(napis) ; i++){
                            if(napis[i]==sp) {m[i]=sp; xx=xx+1; wyniczek=wylosowany*xx;}
                            else{ 
                                  if ((napis[i]>='A') && (napis[i]<='Z'))
                                             m[i]='-';
                            else m[i]=' ';
                            }                 
                        printf("%c",m[i]);
                        }
   

printf("twoj wynik =%d\n",wyniczek);

fflush(stdin);
spr=sprawdz(m,napis);
 printf("spr =%d\n",spr);  

do{

do{
printf("Chcesz kupic samogloske T / N= ");
scanf("\n%c",&wybior);
}
while (wybior !='T' and wybior !='N');

if (wybior=='T'){

fflush(stdin);

                printf("Podaj samogloske= ");
                scanf("%c",&sa);
                                                           
                for (i = 0; i <=strlen(napis) ; i++){
                  if(napis[i]==sa) {m[i]=sa; wyniczek=wyniczek-20;}
                                                      
                     printf("%c",m[i]);
                 }          
  printf("twoj wynik =%d\n",wyniczek);
  
               
}
spr=sprawdz(m,napis);

}
while (spr != 0);

 system("PAUSE");   
 return(0);
    
}

Prosze o pomoc.

0

przesyłaj przez wskaźnik:
int sprawdz(char* x, char* napis)

0

Za to i<=(dlugosc-1) powinni Ci coś urwać! Pisz jak człowiek i<dlugosc.

0

Przekazywanie przez wskaźnik również nie pomogło, nadal przekazuje tylko jeden znak;/. Z ta dlugoscia juz poprawilem:). Próbowałem na innym przykładzie na tablicach liczbowych i wszystko smigalo, a tutaj nie mam pojecia co jest nie tak;/

0
kamulator napisał(a)

Jako, że raczkuje w c mam problem z przekazaniem tablicy m do funkcji sprawdz. Przekazuje mi tylko pierwszy znak;/

A skąd to przypuszczenie, że przekazuje tylko pierwszy znak? Bo wypisuje tylko jeden? Przypatrz się swojej funkcji

int sprawdz(char x[], char napis[]){
    int dlugosc=strlen(napis);
    int i;
    for (i=0;i<=(dlugosc-1);i++)
    {   printf("%c",x[i]);
        if (x[i]=='-') return 1;   // <---- to
        else return 0;             // <---- i to
        
        }  
}

Po wypisaniu pierwszego elementu, funkcja się kończy, czy warunek jest true, czy false return zawsze wystąpi.

0

bo mam tak jeżeli w programie zaczne podawać od drugiej litery hasla to jest wszystko ok sprawdz jest zawsze = 1 natomiast jezeli piodam pierwsza litere to sprawdz jest = 0 a przeciez powinno byc 1 ze wzgledu ze x zawiera dalej inne "-"
To jak to mozna zrobic tak zeby to działało?

0
kamulator napisał(a)

bo mam tak jeżeli w programie zaczne podawać od drugiej litery hasla to jest wszystko ok sprawdz jest zawsze = 1 natomiast jezeli piodam pierwsza litere to sprawdz jest = 0 a przeciez powinno byc 1 ze wzgledu ze x zawiera dalej inne "-"

Nie wiem jak mam czytać ten bełkot. Chyba nie każesz mi czytać całego kodu?

Podaj kilka przykładów tablic x i napis oraz czego się spodziewasz po tej funkcji dla tych argumentów, a jakie dostajesz.

0

tablica m jest napisem ktory sklada sie z -------- kresek ktore przekazywane sa do funkcji sprawdz, funkcja ta ma sprawdzac czy x zawiera jeszcze kreski jezeli nie to program ma sie zakonczycbo haslo jest juz cale. Haslo to np LAZIENKI. Jezeli x zawiera jeszcze kreski to progrmam ma sie wykonywac dalej

0
kamulator napisał(a)

tablica m jest napisem ktory sklada sie z -------- kresek ktore przekazywane sa do funkcji sprawdz, funkcja ta ma sprawdzac czy x zawiera jeszcze kreski jezeli nie to program ma sie zakonczycbo haslo jest juz cale. Haslo to np LAZIENKI. Jezeli x zawiera jeszcze kreski to progrmam ma sie wykonywac dalej

To już podałem przyczynę.
Jak masz "-<tutaj juz="juz" nie="nie" ma="ma" znaczenia="znaczenia" co="co" jest="jest" dalej="dalej">" to wypisuje "-" i zwraca 1.
Jak masz "a<tutaj juz="juz" nie="nie" ma="ma" znaczenia="znaczenia" co="co" jest="jest" dalej="dalej">" to wypisuje "a" i zwraca 0.

Ta funkcja sprawdza tylko jeden znak, bo już w pierwszej iteracji wraca z funkcji. Równie dobrze mogłoby nie być tego for. Rozumiesz?

0

Dzieki za pmoc juz poradzilem sobie.
Zrobilem tak

int sprawdz(char *x, char *napis){
    int dlugosc=strlen(napis);
    int i,c;
    c=0;
    for (i=0;i<dlugosc;i++)
    {   
        if (x[i]=='-') c=c+1;        
    }
        return c;  
}

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