Sveikas mrg. Taigi, brainas pradeda paskaitėlę, kadangi pirmasis čia užklydo

Programa "pakimba" todėl, kad iškviečiama funkcija system("PAUSE"). Ji sustabdo tolesnė kodo vykdymą. Kaip supratau, tu nori, kad programos langas neužsidarytų, kai tik atspausdinami rezultatai. Apie šį iškvietimą rašoma čia:
http://cpp.codenewbie.com/articles/cpp/ ... age_1.html
Taigi, kaip sakė šio straipsnelio autorius, šito iškvietimo geriau nevartoti. Ten parašyta funkcija, kuri turėtų sustabdyti darbą, bet tik pradėjusiam programuoti su C, manau, geriau būtų naudoti paprasčiausią scanf. Kaip ir paskalyje readln.
Taigi, išsiaiškinom problemą, dėl ko programa pakimba. Bet šiaip, ji ir kompiliuotis turėtų su perspėjimais, kadangi čia padarytos dar kelios programavimo klaidos.
Šita vieta sukuria du char tipo kintamuosius. Į char tipo kintamąjį galima įrašyti tik vieną simbolį, taigi, norint įvesti vardą reikia naudoti rodykles arba masyvus.
Kodas: Pasirinkti visus
char x[15], y[15]; //masyvai arba
char *x, *y; // rodyklės
Tokiu atveju išsitaiso ir klaida su scanf. Nuskaitydami simbolių eilutę string(su scanf, naudodami %s), turime pateikti atminties adresą(taip pat ir nuskaitant skaičius ar dar ką kitką perduodamas adresas). Jeigu sakysime, kad vis dėlto norėjome nuskaityti po vieną simbolį, tuomet turime šiek tiek pakeisti scanf iškvietimą(rodyklių ir masyvų atveju čia viskas tvarkoje, t.y. jeigu pradžioje sukūrėme rodykles ar masyvus, čia nieko keisti nereikia). scanf su %s argumentu į nudorytą adresą įkelia nurodytus simbolius + eilutės pabaigos simbolį "\n". Taigi į vieną simbolį galintį išsaugoti kintamąjį dviejų simbolių neįrašysime. %s keičiame į %c/
Toliau viskas gerai, pagal esamą kodą, tačiau jeigu naudosime ne simbolius, tai reikės pakeisti printf iškvietimą.
Kodas: Pasirinkti visus
printf("Jusu vardas: %s\n Pavarde: %s \n Jusu gimimo metai: %ld", x,y,z);
Na lyg ir viskas. O dabar parašysiu, kaip ši programa turi atrodyti, kad ji veiktų.
Kodas: Pasirinkti visus
#include <stdio.h>
// programa su simboliais, t.y. vardas ir pavardė po vieną raidę
int main()
{
char x,y;
int z;
printf("Koks jusu vardas\n");
scanf("%s", &x);
printf("Kokia jusu pavarde\n");
scanf("%s", &y);
printf("Iveskite savo gimimo metus\n");
scanf("%ld", &z);
printf("Jusu vardas: %c\n Pavarde: %c \n Jusu gimimo metai: %ld", x,y,z);
scanf("%d", &z);
return 0;
}
kita versija
Kodas: Pasirinkti visus
#include<stdio.h>
main()
{
char x[15],y[15]; // sukurti 15 simbolių dydžio masyvai
int z;
printf("Koks jusu vardas\n");
scanf("%s", x);
printf("Kokia jusu pavarde\n");
scanf("%s", y);
printf("Iveskite savo gimimo metus\n");
scanf("%ld", &z);
printf("Jusu vardas: %s\n Pavarde: %s \n Jusu gimimo metai: %ld", x,y,z);
return 0;
}
Tingiu toliau aiškinti. Jei bus klausimų - klausk.
P.S. Pas tave printf, kuris klausia vardo taip pat parašytas klaidingai

Šitą pastebėjau tik rašydamas kodą

Kadangi formato simbolių(tų, kurie pasideda procentų ženklais) nėra, tai x argumentas yra nereikalingas. Tačiau jokios reikšmės programos veikimui šitai neduoda. Tiesiog pastebėjimas.
Never argue with an idiot. They bring you down to their level and beat you with experience.