Kezdőlap › Fórumok › Programozás › C programozás
- This topic has 351 hozzászólás, 49 résztvevő, and was last updated 15 years, 5 months telt el by
valaki456.
-
SzerzőBejegyzés
-
2009-01-17-11:09 #2016426
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;iFIGYELEM: 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!
2009-01-17-11:44 #2016427Nem tudom, hogy windows alatt hogy van, de linux alatt épp az ilyenek miatt van a setlocale függvény.
2009-01-17-12:08 #2016428Windows?
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 ** )
2009-01-17-12:37 #2016429uzsolt 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.
2009-01-17-12:43 #2016430ha 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)2009-01-17-12:45 #2016431Kis nyalánkság:
http://www.cplusplus.com/reference/clibrary/2009-01-17-20:42 #2016432CyrSyS 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.
2009-01-18-20:26 #2016433Errő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); }2009-07-30-17:39 #2016434Sziasztok!
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!
2009-07-30-17:47 #2016435Bash 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.)
SzerzőBejegyzés- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz