spamers.tk Pagina de start a forumului spamers.tk FAQ Cautare Membri Grupuri Profil Inregistrare Mesaje private Autentificare
C++ 6

 
Creaza un subiect nou   Raspunde la subiect    Pagina de start a forumului spamers.tk -> C++ si Visul Basic
Subiectul anterior :: Subiectul urmator  
Autor Mesaj
Royal
Administrator
Administrator
Royal

Data inscrierii: 11/Aug/2008
Mesaje: 359

MesajTrimis: 24/08/2008 20:02    Titlul subiectului: C++ 6 Raspunde cu citat (quote)

1. Cum putem introduce date de la tastatura?
Pentru a introduce date de la tastatura intr-o variabila se foloseste functia scanf.

Aceasta functie se foloseste diferit in functie de tipul de date pe care dorim sa-l folosim.
Pentru date de tip numar adica int vom utiliza astfel:


presupunem ca avem o variabila x care este de tip int:
scanf("%d", &x);


Deci este asemanatoare cu printf, prima data se da un text care contine un simbol deosebit care arata ce
fel de variabila se foloseste. %d era folosit si la printf pentru a afisa numere, si aici este folosit pentru
a introduce de la tastatura intr-o variabila numere.
Apoi urmeaza un simbol excepțional & si variabila noastra.


Deci functia scanf va astepta sa introducem de la tastatura un numar, apoi va pune numarul in
variabila x.


Pentru o singura litera, presupunem ca x este de tip char:
scanf(" %c", &x);
.

spatiu
Literele se pot comporta mai ciudat in scanf din cauza ca sunt mai numeroase moduri de litere (seturi de
litere) care ocupa memoria diferit. De aceea punem un spatiu inainte de %c ca sa se comporte bine.

Pentru un text, presupunem ca x este definita asa char x[10];
scanf("%s", &x);


Aici trebuie sa introducem un text care sa nu depaseasca 10 litere lungime.
Atentie: textul care este introdus cu scanf nu poate sa aiba spatii in el, daca are nu vor fi memorate
spatiile, doar textul pana la inițialul spatiu. Exista o functie cu care vom introduce texte cu spatii pe
care o vom afla in alte cursuri.


Un program perfect este urmatorul:

#include <stdio.h>

1

int numar;
char litera;
char text_mai_mic_de_10_litere[10];


main( )


{
printf("numar = ");
scanf("%d", &numar);

printf("litera = ");
scanf(" %c", &litera); // se observa ca am pus un spatiu inainte de %c


printf("text_mai_mic_de_10_litere = ");
scanf("%s", &text_mai_mic_de_10_litere);


printf("Acum afisam datele din variabile:\n");
printf("numar = %d\nlitera = %c\n", numar, litera);
printf("text_mai_mic_de_10_litere = %s\n", text_mai_mic_de_10_litere);


}

Acest program va astepta sa introduci de la tastatura anumite date si apoi le va afisa.

2. Cum sa introducem de la tastatura mai multe date pentru mai multe variabile.
Folosim functia scanf astfel:
presupunem ca avem variabilele a, b si c de tip int si variabilela x de tip text
scanf("%d %d %s %d", &a, &b, &x, &c);


Se lasa spatii intre %d si %d si %s.


Cand se vor introduce datele de la tastatura se va lasa un spatiu intre datele introduse si datele vor fi


pe acelasi rand: Exemplu: 23 45
. .
salut
.
101
.
a b x c

Si toate datele 23, 45, "salut" si 101 vor fi puse in a, b, x, si c.

3. Alte simboluri speciale pentru printf
Daca dorim sa lasam un spatiu pe ecarn cand afisam ceva, dar spatiul sa fie mai mare decat cel
normal. Adica ceva asemanator cu tasta Tab atunci cand scriem ceva intr-un editor.


Simbolul este \t
Vine de la tab. Si lasa un spatiu putin mai mare pe ecran.


Daca vrem sa afisam ghilimele in printf? Stim ca trebuie sa avem textul intre ghilimele in C.
Atunci ce facem, punem ghilimelele intre ghilimele? Pentru ca ghilimelele sunt un text.
NU! Daca am pune asa """ (trei ghilimele una dupa alta) programul poate sa creada orice...
Ca incepe la întâia ghilimea si se termina la a doua, si a treia e degeaba deci da eroare...
Ca sa rezolvam situatia folosim un simbol singular pentru ghilimele: punem \"
Adica daca este acea bara oblica inainte de ghilimele inseamna ca nu sunt ghilemelele care se pun in
jurul unui text in C ci inseamna textul format din ghilimele.


2


Deci in sursa unui program punem printf(" \" "); si se va afisa pe ecarn doar ghilimelele din mijloc.
Daca vrem doua ghilimele: printf(" \" \" "); si se vor afisa doar ghilimelele din mijloc.


Mai exista un simbol special. Daca sa zicem ca avem o eroare intr-un program si vrem sa afisam un
mesaj de eroare si in plus sa facem si un sunet de eroare.
Se poate cu \a
Care inseamna alerta sonora, si scoate un sunet scurt.
Deci putem scrie: printf(" \a "); si se va scoate un sunet.
Daca vrem si un text: printf(" Eroare! \a");


Daca vrem sa avem un text care sa contina o bara oblica asa \
Atunci este o problema pentru că daca scriem asa: printf(" \"); poate insemna mai multe lucruri...
Poate insemna ca \" sunt ghilimelele de care am spus putin mai sus, deci nu se poate folosi astfel.
Atunci cand vom dori o bara oblica \ afisata pe ecran vom scrie in codul sursa de doua ori bara oblica
\\
Deci cu printf(" \\ "); se afiseaza o singura bara oblica \
chiar daca sunt langa ghilimele : printf("\\");


La fel pentru printf("\\n"); va afisa textul \n nu va trece pe o linie noua. Asta se intampla pentru ca
este \\ si nu \


Din ce cauza se intampla asta? Nu se poate sa fie \\n si sa se ia ultimele 2 litere adica \n si sa se zica
ca este o linie noua?
NU! Din cauza ca mai intai programul cauta \\ in textul nostru si cand gaseste inlocuieste \\ cu un
simbol special de-al programului pe care osa-l afiseze pe ecran ca \
Apoi textul nostru va fi asa: <simbol special care inseamna \>n apoi cauta alte lucruri speciale, dar
nu mai sunt si apoi afiseaza \n. Deci nu trece pe linia urmatoare.


Ce afiseaza comanda: printf("\\\n");?
Pai prima data se cauta de la stanga spre dreapta bare oblice duble adica \\.
Se gasesc primele doua si se inlocuiesc cu simbol special, deci textul nostru va fi
<simbol special>\n
Apoi se continua, se ajunge la urmatoarea bara, dar din cauza ca nu e dubla nu se face nimic.
Apoi se ajunge la n si nu se face nimic deocamdata.
Se continua dar nu mai e nimic deci s-a terminat cautarea de bare duble.
Acum se cauta din nou alte simboluri speciale ca: \n sau \a sau \t sau \"
Se gaseste in textul <simbol special>\n simbolul special \n deci in final
se va afia o bara oblica dupa care se trece pe linia urmatoare.


Ce afiseaza: printf("\\\\n"); ?
Pai prima data se cauta de la stanga spre dreapta bare oblice duble adica \\.
Se gasesc primele doua si se inlocuiesc cu simbol special, deci textul nostru va fi
<simbol special>\\n
Apoi se continua, se ajunge la urmatoarea bara, si se vede ca urmeaza inca o bara deci se inlocuiesc
iar cu un simbol special, deci textul va fi <simbol special><simbol special>n
Apoi se ajunge la n si nu se face nimic deocamdata.
Acum se cauta din nou alte simboluri speicale ca: \n sau \a sau \t sau \"
Nu se mai gasesc simboluri speciale deci se va afisa
astfel: doua bare oblice si apoi litera n, adica \\n


Ce afiseaza: printf("\\a")? Sau scoate un sunet?
Pai cum am discutat mai sus, sunt 2 bare deci se va afisa o bara oblica si litera a ramane singura, deci


3



nu se va mai scoate nici un sunet ci se va afisa \a

Cum scriu in codul sursa ceva care sa afiseze pe ecran textul:

<un nume> a citit cartea "Punguta cu doi bani".

In <un nume> se pune orice nume care este text, deci <un nume> este o variabila de tip text.

#include <stdio.h>

char nume[15];

main( )

{

printf("Cum il cheama pe cititor?\nnume=");

scanf("%s", &nume);

printf("%s a citit cartea \"Punguta cu doi bani\".", nume);
}

Se observa ca se folosesc \" pentru ghilimelele care fac parte din textul care trebuie afisat, ele vor
avea ca rezultat afisarea ghilimelelor pe ecran.Altfel nu am fi putut pune ghilimele.

4
Sus
Vezi profilul utilizatorului Trimite mesaj privat
Afiseaza mesajele pentru a le previzualiza:   
Creaza un subiect nou   Raspunde la subiect    Pagina de start a forumului spamers.tk -> C++ si Visul Basic Ora este GMT + 2 ore
Pagina 1 din 1

 
Mergi direct la:  
Nu puteti crea un subiect nou in acest forum
Nu puteti raspunde in subiectele acestui forum
Nu puteti modifica mesajele proprii din acest forum
Nu puteti sterge mesajele proprii din acest forum
Nu puteti vota in chestionarele din acest forum


Powered by phpBB © 2001, 2002 phpBB Group
Fa-ti si tu propriul forum GRATUIT, pe www.myforum.ro