Wątek przeniesiony 2014-01-21 16:06 z C/C++ przez ŁF.

Niedziałający program pod Linuxem

0

Witam.
Mam problem z programem w c, który działa w devc++, lecz gdy odpalam go pod linuxem to już nie. Link do programu(http://www9.zippyshare.com/v/66842078/file.html +plik txt).

Doszedłem do wniosku, że problem polega na usuwaniu znaku końca linii ze stringa, który pobiera z pliku txt, jednak nie wiem jak z tym sobie poradzić. W devc++ funckja wypisuje podane słowo z każdym wyrazem z pliku txt. A pod linuksem wyskakuje tylko jeden wyraz w dodatku nie poprawnie np. <podany wyraz="wyraz">abecadloacz(powinno być bez tego acz na końcu). Najlepiej samemu odpalić i sprawdzić co się dzieję.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define n 30
#include<ctype.h>
#include<time.h>

void usunenter(char* s)
{
    char *ptr;

    if((ptr = strchr(s, '\n')) != NULL)
    {
        *ptr = '\0';
    }
}

void usunspacje(char* s)   //funkcja usuwajaca spacje ze stringa
{
    int p = -1, q = 0;
    while (s[++p] != '\0') if (s[p] != ' ') s[q++] = s[p];
    s[q] = '\0';
}

int main()
{
    printf("\nWitaj w programie Palindromy\n");
    int p,wyjscie=0;
    char p1[2];

    while(wyjscie==0)
    {                                             //Menu
        printf("\nWybierz operacje, ktora chcesz wykonac\n\
        \n1.Generacja palindromow za pomoca slownika\n2.Exit.\n");
        scanf("%d",&p);
        fgets(p1,2,stdin);
        switch(p)
        {
            case 2:
            {
                wyjscie=1;
                break;
            }
            case 1:
            {
                FILE *fp;
                int i,j,c,dl,dl2,g,check1,linie=0,p,ilu;
                char wyraz[50];
                char slownik[50];
                char slownik2[50];
                char slownik3[50];
                char slownik1[50];
                char slownik4[50];
                char wyraz1[50];
                char wyraz2[50];
                char razem[50];
                char  buffer[BUFSIZ];

                if ((fp=fopen("p.txt", "r"))==NULL)
                {
                    printf ("Nie mogę otworzyć pliku polish.txt!\n");
                    exit(1);
                }

                while (fgets(buffer, sizeof buffer, fp))
                {
                    ++linie;
                }

                rewind(fp);
                printf("\npodaj wyraz\n");
                scanf("%s",wyraz);

                for(g = 0; wyraz[g]; g++)
                {
                    wyraz[g] = tolower(wyraz[g]);
                }

                dl=strlen(wyraz);

                for(i=0;(i<linie)&&fgets(slownik,20,fp);++i)
                {
                    usunenter(slownik);
                    strcpy(slownik1,slownik);
                    strcpy(wyraz1,wyraz);
                    strcat(wyraz1,slownik);
                    dl2=strlen(wyraz1);
                    printf("%s",wyraz1);
                }
            }
            default:
            {
                break;
            }
        }
    } //wyjsice ze switcha

    return 0;
}

sformatowanie kodu - fp

2

Znak nowej linii to może być \n albo \r\n albo \r
http://pl.wikipedia.org/wiki/End-of-line

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