C programozás

Kezdőlap Fórumok Programozás C programozás

10 bejegyzés megtekintése - 331-340 / 352
  • Szerző
    Bejegyzés
  • #2016426
    CyrSyS
    Felhasználó

      Sziasztok!

      Köszönöm az ünnep közti segítségeket sikerült rájönnöm a problémára és persze azóta tovább fejlődtem! Vizsgám sajnos nem sikerült még eddig hát így van ez! Itthon 5-re is megcsinálok egy példát de ott meg mindig az időszűke zavar meg! De tovább menve előjött egy haladóbb szintű probléma! Utánjárásom során tényként közölték hogy a C nyelvben egy kicsit macerás az ékezetes betűk kezelése! Hát ezt én is belátom de ha adódik egy olyan feladat hogy ellenőrzött névbekérés ahol akár nagy Á É Í Ő Ú Ű betűk is előfordulhatnak nem tehetek kifogást. A nyelvnek azonban nem nagyon tetszik hogy erőltetem a dolgot! Én már írtam egy névellenőrző fgv-nyt ami csak egy ellenőrzőtt nevet ad vissza! Ezzel a függvénnyel semmi gond nincs csak egyetlenegy! Az hogy ha valaki Édes Péter-nek hívnak akkor azt fogja a függvény hogy é betűvel kezdődik de azt már nem hogy nagy is! Á betűnél nincs ilyen gond! Itt a fgv:

      Code:
      void tulajdonnev(char question[], int min, int max, char textki[]){
      int jo,i, hossz;

      jo=0;
          do{
              printf(question);
      hossz=getline(textki,max+1);
              if (hossz==0) printf(„nNem adtal meg szoveget!n”);
      else if (hosszmax) printf(„nA megadott szovegnek maximum %d karakter lehet!n”,max);
      else {
      for (i=0;i

      FIGYELEM: a for cikluson belüli első ellenőrzésben/feltételben lévő krix krax karakterek nem hibásak ugyanis a turbo C-be betöltve azokat ékezetes betűknek észleli és működnek! GCC nem tudom hogy kezeli!

      Ha valaki pontosan szeretné tudni mit kell ellenőriznie a fgv-nyek akkor ezek a következők:
      – ha a vezetéknevet kis kezdőbetűvel gépeljük rinyáljon és azonnal kérjen be új nevet!
      – ha valamelyik tagnevet kis kezdőbetűvel gépelünk be rinyáljon!
      – És ez mind működjön ékezetes betűknél is!


      > nekem valójában itt a bibi csak!

      köszönöm előre is!

      #2016427
      uzsolt
      Felhasználó

        Nem tudom, hogy windows alatt hogy van, de linux alatt épp az ilyenek miatt van a setlocale függvény.

        #2016428
        zoltan22
        Felhasználó

          Windows?

          CyrSyS wrote:
          ugyanis a turbo C-be betöltve
          En inkabb valami osregi DOS-os Turbo C-re gondolok. Ami siman mukodik dosbox / dosemu-val.

          gcc-vel a program kapasbol szegmentalasi hibat dob, mert a getline fuggveny nem megfeleloen van parameterezve.  ( char * vs char ** )

          #2016429
          pointux
          Felhasználó
            uzsolt wrote:
            Nem tudom, hogy windows alatt hogy van, de linux alatt épp az ilyenek miatt van a setlocale függvény.

            Windows alatt ugyanúgy van, csakhogy itt (számos iskolában) nem szabványos c-t, hanem turbo c-t oktatnak és használnak.

            #2016430
            pointux
            Felhasználó

              ha a vezetéknevet kis kezdőbetűvel gépeljük rinyáljon és azonnal kérjen be új nevet!

              Code:
              if (!isupper(kezdobetu) rinya();

              Ha a szám is számít akkor

              Code:
              isalpha(betu)
              #2016431
              pointux
              Felhasználó
                #2016432
                gabaman
                Felhasználó
                  CyrSyS wrote:
                  Utánjárásom során tényként közölték hogy a C nyelvben egy kicsit macerás az ékezetes betűk kezelése! Hát ezt én is belátom de ha adódik egy olyan feladat hogy ellenőrzött névbekérés ahol akár nagy Á É Í Ő Ú Ű betűk is előfordulhatnak nem tehetek kifogást. A nyelvnek azonban nem nagyon tetszik hogy erőltetem a dolgot!

                  (…)

                  – És ez mind működjön ékezetes betűknél is!


                  > nekem valójában itt a bibi csak!

                  Az elv egyszerű, de ha TurboC a fordító akkor lehetetlen vállakozás (hiányzik belőle a wchar támogatás). Egyszerűen csak megfelelően beállított setlocale() és wchar típusú sztringek kellenek. Meg az isalpha() helyett iswalpha(), isupper() -> iswupper(), islower() -> iswlower(), és akkor az összes ékezetes betű megfelelően lesz kezelve. A dolog akkor nehezedik, ha UTF-8 alapú a kódolás, mert akkor több bájtos karaktereket kell átalakítani széles karaktrekké. De erre ott van az mbsrtowcs(), de csak C99 (ISO 9899:1999) alapú fordítókkal meg rendesen.

                  #2016433
                  gabaman
                  Felhasználó

                    Erről beszélek:

                    Code:
                    void tulajdonnev(char question[], int min, int max, wchar_t *textki) {
                        int jo, i, hossz;
                        wchar_t *read;

                        jo = 0;
                         do {
                            printf (question);
                            scanf („%ls”, &read);
                            hossz = wcslen (read);
                            if (hossz == 0) {
                                printf („nNem adtal meg szoveget!n”);
                                continue;
                            }
                            wcsncat (textki, read, max);
                            free (read);
                            if (wcscmp(textki, L”kilép”) == 0)
                                break;
                            if (hossz < min) {             printf ("nA megadott szovegnek legalabb %d hosszunak kell lennie!n",min);             continue;         }         if (hossz > max) {
                                printf („nA megadott szovegnek maximum %d karakter lehet!n”,max);
                                continue;
                            }
                            for (i = 0 ; i < hossz - 1 ; i++) {             if (iswalpha(textki[i])                 jo=1;                 textki[i+1] = towlower (textki[i+1]);             }             else {                 printf("nA megadott szoveg nem megengedett karaktert/karaktereket tartalmaz!n");                 jo = 0;                 break;             }              if ((jo==1) && iswupper(textki[0]))                 jo = 1;             else {                 jo = 0;                 printf("nA tulajdonnev elso betuje mindig nagybetu!n");                 break;               }               if ((i!=0) && (textki[i] == L' '))                 textki[i+1] = towupper (textki[i+1]);           }        }      } while (!jo); }

                    #2016434
                    Teati
                    Felhasználó

                      Sziasztok!

                      Most kezdek ismerkedni a C-vel és szeretnék írni egy programot. A program annyit csinálna, hogy egy szövegfájlból kiolvas egy számot (csak az a szám van benne (a wifi kártyának az engedélyezése/ tiltása függvénye az érték)) és ha egy ilyen szám akkor nem csinál semmit, ha egy olyan szám akkor elindít egy pár programot (vagy lehet, hogy bash scriptet). Az érték kiolvasásával már boldogulok, megállapítom, hogy le van-e tiltva a kártya. Csak innen nem tudom tovább. Milyen módon lehet külső programot indítani C-ben?

                      Köszönöm a segítséget!

                      #2016435
                      kisbetu
                      Felhasználó

                        Bash scripttel gyorsabban célt érnél.

                        (De gyakorlásnak javaslom, szedd le az SKL-ről a myburnert: tipikus C kezdő alkalmazás, úgy látom, pont arra van szükséged, amit az is csinál.)

                      10 bejegyzés megtekintése - 331-340 / 352
                      • Be kell jelentkezni a hozzászóláshoz.