QSORT tablica wyrazow

0

Mam problem z tym programem

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<unistd.h>
#define NR 10

int cstring_cmp(const void *a, const void *b)
            {
                const char **ia = (const char **)a;
                const char **ib = (const char **)b;
                return strcmp(*ia, *ib);
            }
            
int main(void)
{
	int i,k;
	char temp[1000];
	char* words_array[NR];
	for (i=0; i<NR; i++)
	{
		scanf("%s\n", temp);
		words_array[i] = (char*)malloc((strlen(temp) + 1)*sizeof(char));
		strcpy(words_array[i], temp);
		
	}
	 
            qsort(words_array,NR ,sizeof(char *) ,cstring_cmp );
            printf ("\n");
            printf ("the sorted array list is:\n");
            for (i=0;i<NR;i++)
            {
            printf("%s\n", words_array [i]);
                }
}
 

Pętla

for (i=0; i<NR; i++)
	{
		scanf("%s\n", temp);
		words_array[i] = (char*)malloc((strlen(temp) + 1)*sizeof(char));
		strcpy(words_array[i], temp);
		
	} 

"Wykonuje" sie 11 razy a powinna 10 (dlaczego tak jest?), nastepnie program powinien wyswietlic taka sama ilosc wyrazow jaka wprowadzilem tylko ze uporzadkowane alfabetycznie (wyswietla o 1 mniej -> dlaczego ?)

0

To wina znaku nowej lini w pętli wczytującej.

1

Tu jest Twój, program. Może coś źle liczysz, ale na ideone wygląda poprawnie:
http://ideone.com/jAMT23

0
voliseq napisał(a):

"Wykonuje" sie 11 razy a powinna 10 (dlaczego tak jest?), nastepnie program powinien wyswietlic taka sama ilosc wyrazow jaka wprowadzilem tylko ze uporzadkowane alfabetycznie (wyswietla o 1 mniej -> dlaczego ?)

Tak jest dla tego że musisz kupić podręcznik arytmetyki i przypomnieć sobie liczenie do 10

http://ideone.com/NslrGz

0

Skoro mowie ze 11 razy sie powtarza to tak jest, moze to nie wina programu samego w sobie

0

Zeby nie robic nowego tematu mam jeszcze pytanie do podobnego programu

 #include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define NR 100
int cstring_cmp(const void *a, const void *b)
            {
                const char **ia = (const char **)a;
                const char **ib = (const char **)b;
                return strcmp(*ia, *ib);
            }
int main(void)
{
	int i;
	char znak;
	char *CHAR_ARRAY[NR];
	for (i=0; i < NR; i++)
	{
		
		znak = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" [rand() % 26];
		
		CHAR_ARRAY[i] = (char*)malloc(sizeof(char));
		strcpy(CHAR_ARRAY[i], &znak); 
	}
	qsort(CHAR_ARRAY,NR ,sizeof(char*),cstring_cmp );
            printf ("\n");
            printf ("the sorted array list is:\n");
            for (i=0;i<NR;i++)
            printf("%c\n", CHAR_ARRAY [i]);
                    return 0;
}

Chcialem zeby program wygenerowal 100 losowych znakow z zbioru "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ale w rezultacie otrzymuje rozne dziwne znaki, w czym tkwi problem ?

0

Do twego bezsensu ma być: printf("%c\n", *CHAR_ARRAY [i]);

Z tym że totalnie to schrzaniłeś, po ludzku to tak:

char CHAR_ARRAY[NR];
for(i=0;i<NR;++i) CHAR_ARRAY[i]='A'+rand() % 26;
qsort(CHAR_ARRAY,NR ,1,char_cmp);
for(i=0;i<NR;++i)  printf("%c\n",CHAR_ARRAY[i]);

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