Chirurgia endoscopică a hipofizei
"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală. Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale. www.neurohope.ro |
Cum functioneaza Ctrl+Z+Enter in C++
Last Updated: Jan 17 2017 16:49, Started by
danb1961
, Jan 17 2017 10:21
·
0
#1
Posted 17 January 2017 - 10:21
#include <iostream>
#include<conio.h> #include <fstream> using namespace std; char ch,nume[20]; fstream f("belea.in", ios::out); int main() { while(cin>>ch) f<<ch; f.close(); } Iesirea din While se face cand expresia (cin>>ch)== 0; la apasare Ctrl+z(26 ascii)+Enter(13 ascii), facand abstractie de Enter care este folosit de cin pentru validare input, ch ar avea valoarea 26...totusi expresia (cin>>ch) este evaluata la 0(false) Unde gresesc, care este explicatia. Multumesc |
#2
Posted 17 January 2017 - 10:39
combinatia respectiva nu este procesata de aplicatia ta, care se opreste din alta cauza.
https://msdn.microso...1(v=vs.85).aspx Edited by _Smiley_, 17 January 2017 - 10:40. |
#3
Posted 17 January 2017 - 11:12
Partial cred ca ai dreptate, anumite combinatii de taste sunt interpretate de SO, totusi programul nu se opreste, expresia este evaluata si se continua executia programului cu urmatoare instr. f.close()
|
#4
Posted 17 January 2017 - 11:17
@_Smiley_: Nu vad ce legatura are cu Ctrl+C sau Ctrl+Break. Aici e vorba de Ctrl+Z
Motivul e probabil ca, din vremuri imemoriale, Ctrl+Z semnaleaza sfarsit de fisier. De la consola nici nu ai cum altfel sa marchezi sfarsit de fisier. Pentru fisiere disc in prezent se foloseste de regula lungimea lui, in bytes, pentru a-i detecta sfarsitul. Dar nici aici nu a fost intotdeuna asa. In CP/M de exemplu lungimea fisierelor pe disc era indicata in numar de sectoare, un sector avand (la vremea respectiza, pe floppy-discurile de 8") 128 de bytes. Deci in cazul unui fisier text nu avea lungimea multiple de 128 singura solutie era ca spatiul in plus din ultimul sector sa fie umplut cu Ctrl+Z (sau macar pus un Ctrl+Z, apoi dupa el era ‘gunoi’). De ce tocmai Ctrl+Z? In standardul ASCII, Ctrl+Z se numeste de fapt EOF adica ‘End Of File’… LE: Pe de alta parte, esti sigur ca din while(){} se iese pe conditia de == 0 si nu ca urmare a semnalarii unei exceptii? (Nu pot testa acum sa vad exact.) Nu de alta, dar operatorul >> ar trebui sa intoarca o referinta la cin, deci nu vad cum poate fi NULL. Ca urmare a exceptiei, care nu este tratata, se iese din program iar sistemul de operare inchide automat toate fisierele lasate ‘agatate’, deci si "belea.in". Edited by sags, 17 January 2017 - 11:35. |
#5
Posted 17 January 2017 - 12:20
Programul se termina in consola cu mesajul :Process returned 0 (0x0) execution time : ....Press any key to continue; Din cate stiu, pe CodeBlocks 0=fara erori. Si repet , conditia este evaluata si programul nu se termina, continuand cu executia urmatoarei instructiuni.
PS Ctrl+Z "forteaza " iesirea"/evaluarea din while, numai daca este primul caracter pe linie;in caz contrar,daca are inainte ,pe aceeiasi linie, un caracter, scrie in fisier ->(sageata) Edited by danb1961, 17 January 2017 - 12:32. |
#6
Posted 17 January 2017 - 13:57
M-am uitat la codul generat si am gasit o explicatie. E adevarat ca motivul de baza este ca acel Ctrl+Z la inceput de linie e luat de sfarsit de fisier si, fiind la inceput de linie, cin nu are nimic disponibil pentru citit - nu a obtinut nici un buffer de la tastatura. operator >> intoarce intr-adevar o referita la cin. Mai departe insa pentru a testa conditia se aplica un operator void * pe aceasta referinta, iar acest operator arata cam asa:
std::ios_base::operator void *() const { return (fail() ? 0 : (void *)this); }De aici explicatia: fiindca nu a putut citi nimic, failbit este setat si deci conversia intoarce NULL. Din ce am trasat sunt setate failbit si eofbit, dar numai failbit | badbit sunt examinate pentru a decide daca intoarce NULL sau nu. Intr-adevar imi pare cam ciudat ca un Ctrl+Z precedat de caractere ‘normale’ este tratat si el ca un caracter ‘normal’ (copiat in ch) si nu ca sfarsit de fisier. Nu am sapat mai mult, poate e o conventie in acest sens pe undeva sau poate e un bug |
#7
Posted 17 January 2017 - 16:49
LE: Am gasit prin specificatii explicatia cum functioneaza operator void * (pre- C++11) si operator bool (post C++11) pe stream-uri aici <http://en.cppreferen...s/operator_bool>, si se confirma ce am remarcat mai sus despre utilizarea unei referinte la cin pe post de test.
|
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users