[C++] program przerabiający słowa- błąd logiczny

diego_maradona
Użytkownik
Użytkownik
Posty: 184
Rejestracja: 16 cze 2010, o 00:59
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 80 razy

[C++] program przerabiający słowa- błąd logiczny

Post autor: diego_maradona » 29 lip 2011, o 14:07

Kod: Zaznacz cały

// Pig_latin_strings.cpp : main project file.

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;


void beginWithVowel (string sentence )
{
	cout<< sentence + "-way";
}



int main()
{ 
	string str;
	char firstLetter;

	cout<<"Program outputs your string in the pig Latin form \n"
		<<"enter your string ";
	str = cin.peek();
	firstLetter = cin.peek();
	if ((firstLetter != 'A') || (firstLetter != 'I') || (firstLetter != 'O') || (firstLetter != 'E') || (firstLetter != 'Y') ||  (firstLetter != 'a') || (firstLetter != 'i') || (firstLetter != 'o') || (firstLetter != 'e') || (firstLetter != 'y'))
	cout<<" Section under construction"<<endl;
	else
	beginWithVowel(str);

	cout<<endl;
	system("PAUSE");
}
Program ma za zadanie przeczytać słowo wpisane przez użytkownika ; jeśli zaczyna się ono na samogłoskę to dodaje do niego "-way" i wyświetla je na ekranie.

np.
eye \(\displaystyle{ \Rightarrow}\) eye-way
arse \(\displaystyle{ \Rightarrow}\) arse-way itp.
Problem w tym że nawet jak wpiszę słowo zaczynające się na samogłoskę to funkcja beginWithVowel nie chce się uruchomić :| w którym miejscu jest błąd?

Crizz
Gość Specjalny
Gość Specjalny
Posty: 4094
Rejestracja: 10 lut 2008, o 15:31
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 12 razy
Pomógł: 805 razy

[C++] program przerabiający słowa- błąd logiczny

Post autor: Crizz » 29 lip 2011, o 14:31

Zastanów się dobrze nad warunkiem w ifie.

diego_maradona
Użytkownik
Użytkownik
Posty: 184
Rejestracja: 16 cze 2010, o 00:59
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 80 razy

[C++] program przerabiający słowa- błąd logiczny

Post autor: diego_maradona » 29 lip 2011, o 14:45

Patrzę i nie mam pojęcia co może być źle, w międzyczasie zmieniłem kod , ale wciąż nie wiem co było źle w tym if'e.

Kod: Zaznacz cały

// Pig_latin_strings.cpp : main project file.

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

bool isVowel (char letter)
{	 
	 switch (letter)
	 {
	 case 'a':
	 case 'e':
     case 'i':
	 case 'o':
	 case 'u':
	 case 'y':
	 case 'A':
	 case 'E':
	 case 'I':
	 case 'O':
	 case 'U':
	 case 'Y':
      return true;
	 default: 
      return false;
	 }
}
void beginWithVowel (string sentence )
{
	cout<< sentence + "-way";
}

void notBeginWithVowel (string sentence)
{
	sentence+="-";
	

}

int main()
{ 
	string str;
	char firstLetter;

	cout<<"Program outputs your string in the pig Latin form \n"
		<<"enter your string ";
	str = cin.peek();
	firstLetter = cin.peek();
	if (isVowel(firstLetter))
	beginWithVowel(str);
	
	
	cout<<endl;
	system("PAUSE");
}
teraz jest trochę lepiej, ale znowu wystąpił błąd którego nie jestem w stanie pojąć , mianowicie po wpisaniu "eye" wyświetla się e-way. Jakim cudem, skoro argumentem funkcji beginWithVowel jest str a nie firstLetter?

-- 29 lip 2011, o 16:06 --

Ok,użyłem echa i okazało się że funkcja peek tyczy się tylko zmiennej char, a ja jej użyłem do stringa, stąd ten misz masz. Teraz po użyciu zwykłego cin jest wszystko ok, ale dalej nie wiem co było nie tak z tym ifem, jak ktoś mógłby wytłumaczyć to byłbym wdzięczny :)

Afish
Moderator
Moderator
Posty: 2823
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 354 razy

[C++] program przerabiający słowa- błąd logiczny

Post autor: Afish » 29 lip 2011, o 16:59

Warunek zawsze był prawdą.

ODPOWIEDZ