• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Enter - koniec wprowadzania danych.

Object Storage Arubacloud
0 głosów
628 wizyt
pytanie zadane 12 lutego 2016 w C i C++ przez Ted0ka Nowicjusz (180 p.)

Witam. Napisałem program wczytujący nazwy 8 miast. Zadaniem programu jest posortowanie ich alfabetycznie. W jaki sposób sprawić że jeśli podczas wprowadzania kolejnej nazwy użytkownik wciśnie ENTER, wprowadzanie zostaje przerwane? Proszę o pomoc, niestety nigdzie nie udało mi się znaleźć działającej odpowiedzi na moje pytanie :( Pozdrawiam

 

#define N 8
#include <iostream>
#include <string>

using namespace std;

string miasta[N];
void sortuj(string tab[]);


int main() {

	for (int i = 0; i<N; i++) {
		cout << "Podja nazwe miasta: ";
		getline(cin, miasta[i]);
	}

	sortuj(miasta);

	getchar();
	return 0;
}

void sortuj(string tab[]) {			//sortowanie 

	for (int i = 0; i<N - 1; i++) {
		for (int j = 0; j<N - 1; j++) {

			if (tab[j]>tab[j + 1])
				swap(tab[j], tab[j + 1]);
		}
	}

	cout << "\nMiasta po posortowaniu: " << endl;

	for (int i = 0; i<N; i++) {
		cout << miasta[i] << endl;
	}
}

 

2 odpowiedzi

+2 głosów
odpowiedź 12 lutego 2016 przez draghan VIP (106,230 p.)

Masz złe tagi - używasz strumieni i std::string, więc to jest program w C++. ;)

Spójrz na taki kawałek kodu:

 #include <iostream>
 #include <string>
 using namespace std;

 int main()
 {
     string s;
     char c;
     cout << "Podaj nazwe miasta: ";
     c = getchar();
     if(c == '\n')
     {
         cout<<"koniec"<<endl;
     }
     else
     {
         getline(cin, s);
         s = c + s;
         cout<<s<<endl;
     }
 }

 

komentarz 12 lutego 2016 przez draghan VIP (106,230 p.)

W sumie niepotrzebnie skomplikowałem. :)

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s;
    cout << "Podaj nazwe miasta: ";
    getline(cin, s);
    if(s.size() == 0) cout<<"koniec"<<endl;
    else cout<<s<<endl;
}

 

komentarz 12 lutego 2016 przez mbabane Szeryf (79,280 p.)

trzeba jeszcze dodac: #include <stdio.h> jesli chcemy uzyc getchar()

komentarz 12 lutego 2016 przez draghan VIP (106,230 p.)
edycja 12 lutego 2016 przez draghan

trzeba jeszcze dodac: #include <stdio.h> jesli chcemy uzyc getchar()

W żadnym wypadku - to tylko ogranicza przenośność programu, a nie wnosi nic.*
getchar() jest funkcją ze standardu C++, a więc znajduje się w standardowym nagłówku - w tym przypadku iostream.

Myślę, że chodziło Ci o getch() - wtedy owszem, należy dołączyć tamten nagłówek. Ale jeśli nie ma wyraźnej potrzeby używania tej funkcji, to lepiej tego nie robić. ;)

____________________________________

*- nie wiem, czy jeszcze się nie obudziłem, czy co, że takie bzdury napisałem. Miałem na myśli nagłówek conio.h, który nie jest częścią standardu.

komentarz 12 lutego 2016 przez Ted0ka Nowicjusz (180 p.)

Super. Wszystko teraz działa jak należy. Dzięki laugh

ps. co do tagów teraz dopiero to zauważyłem że zamiast c++ jest c frown

komentarz 12 lutego 2016 przez mbabane Szeryf (79,280 p.)

w code::blocks nie dziala u mnie bez <stdio.h>

komentarz 12 lutego 2016 przez draghan VIP (106,230 p.)
Masz rację, nie przemyślałem tego dobrze.

Zapomniałem o jednej kwestii. Jeśli kompilujesz program w standardzie sprzed C++11, musisz włączyć osobno cstdio. Kiedy kompilujesz dla C++11 i wyżej, nie ma potrzeby włączać dodatkowo cstdio, wystarcza iostream.
0 głosów
odpowiedź 12 lutego 2016 przez mbabane Szeryf (79,280 p.)

mozna np. zrobic cos na zasadzie "Czy chcesz wprowadzać dalej miasta? T/N" mozna zastosowac tutaj prostego ifa w petli i jesli uzytkownik nie chce juz wprowadzac danych to wywolac break w petli.

komentarz 12 lutego 2016 przez Ted0ka Nowicjusz (180 p.)

Tak. Wiem. A czy można to zrobić jakoś inaczej. Gdy np. tekst jest pusty to automatycznie następuje break?

komentarz 12 lutego 2016 przez mbabane Szeryf (79,280 p.)

Gdy nic nie wprowadzimy i nacisniemy enter to mozna zrobic:

if ( odczytany_lancuch == "") break;

To zadziala tylko jesli uzyjemy funkcji getline(cin, odczytany_lancuch) 

Podobne pytania

0 głosów
1 odpowiedź 311 wizyt
pytanie zadane 5 października 2016 w C i C++ przez maciek221 Początkujący (300 p.)
0 głosów
1 odpowiedź 78 wizyt
pytanie zadane 12 kwietnia 2019 w Java przez Paweł123 Nałogowiec (33,500 p.)
0 głosów
0 odpowiedzi 369 wizyt

92,631 zapytań

141,498 odpowiedzi

319,869 komentarzy

62,011 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...