problem z if else

0

cześć wszystkim jestem nowym użytkownikiem jest to mój pierwszy post na tym forum. Od niedawna uczę się c++ i trafiłem na problem który pewnie dla wielu z was jest banalny jednak ja za nic w świecie nie mogę dostrzec błędu dlatego proszę o pomoc. Problem lezy w instrukcji if else ponieważ program zachowuje sie tak jakby nie widział wewnętrzego ifa sprawdza czy znak jest cyfra i wyswietla ciag znakow bez cyfr to jest ok ale dlaczego jezeli znak nie jest cyfra nie przechodzi do wewnatrz i nie zamienia liter? osobno te funkcje dzialaj dobrze problem zaczyna sie w polaczeniu sprawdzania czy jest to cyfra i jezeli nie to zamieniania na małe / duże litery dodam ze kompilator nie wyrzuca żadnego błędu oto kod:

  
#include <iostream>
#include <fstream>
#include <cctype>
#include <cstdlib>
using namespace std;

int main()
{
    cout<< "Podaj tekst ";
    
    char znak;
    cin.get(znak);
    while (znak != '@')
    {
          if (znak != isdigit(znak))
          {                            
                                  
          if (islower(znak))
          {
                             znak = toupper(znak);
                             cout<< char (znak);
                             
                             }
                             
          else
          {
                             znak = tolower(znak);
                             cout<< char (znak);
                             
                             }
                             
          }
          else                                              
              cin.get(znak);
              
              }
    
    
    
    system("PAUSE");
}
1

Jak sformatujesz kod po ludzku to natychmiast sam zobaczysz w czym problem.

0

Masz tu sformatowany kod:

#include <iostream>
#include <fstream>
#include <cctype>
#include <cstdlib>
using namespace std;
 
int main() {
    cout<< "Podaj tekst ";
 
    char znak;
    cin.get(znak);
    while (znak != '@')  {
          if (znak != isdigit(znak)) {                            
              if (islower(znak))  {
                  znak = toupper(znak);
                  cout<< char (znak);
              } else {
                   znak = tolower(znak);
                   cout<< char (znak);
              }
          } else cin.get(znak);
 
     }
 system("PAUSE");
}
0

Kod który podałeś uwzględnia zamiane liter na małe / duże za to nie bierze pod uwage cyfr i wyświetla je razem z literami zamiast je odrzucać więc jeszcze gdzieś musi być błąd

wiem ze to banał ale naprawde nie rozumiem dlaczego jeżeli wczytany znak to cyfra to nie odrzuca jej w warunku i nie przechodzi do else wczytujac kolejny znak tylko go wyswietla

if (znak != isdigit(znak))
0

Masz tu poprawione i pamiętaj, że formatowanie kodu to nie jest wymysł jakiegoś szalonego typa.
Ten Twój warunek w pierwszym if if (znak != isdigit(znak)) jest totalnie bez sensu, bo praktycznie zawsze będzie prawdziwy.

#include <iostream>

using namespace std;

int main()
{
	cout<< "Podaj tekst ";

	char znak;
	cin.get(znak);
	while (znak != '@')
	{
		if (!isdigit(znak))
		{                            
			if (islower(znak))
			{
				znak = toupper(znak);
				cout<< char (znak);
			}

			else
			{
				znak = tolower(znak);
				cout<< char (znak);
			}
		}                                          
		
		cin.get(znak);
	}

	cin.sync();
	cin.get();
}
0

teraz wszystko działa jak powinno dzieki za zainteresowanie bede zwracał uwage na to jak formatuje kod jeszcze raz dzieki!

0

A tak naprawdę chodziło o to:

#include <iostream>
#include <cctype>

using namespace std;
 
int main()
  {
   cout<< "Podaj tekst (do znaku @): ";   
   for(int znak;((znak=cin.get())!= '@')&&(znak!=EOF);)
     {
      if(islower(znak)) znak=toupper(znak);
      else if(isupper(znak)) znak=tolower(znak);
      else continue;
      cout<<(char)znak;
     }
   cin.sync();
   cin.get();
   return 0;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1