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

Problem z kompilatorem

+1 głos
303 wizyt
pytanie zadane 20 lutego 2019 w C i C++ przez Tr0liK Nowicjusz (180 p.)
edycja 20 lutego 2019 przez criss

Witam, robiłem sobie w ramach nauki zadanie maturalne z informatyki z poprzedniego roku. Znalazłem nawet spoko filmik na yt gdzie facet je objaśnia, jako że moje jedyne źródło wiedzy odnośnie programowania w c++ pochodzi od poradników pana Mirosława to trochę byłem zdziwiony. Kod wygląda dużo inaczej, może dlatego że on akurat pisze w VisualStudio, ale ja nie o tym. Spokojnie sobie przepisywałem kod, by go zrozumieć w pełni kawałek po kawałeczku. Jednakże po zrobieniu poprawnie pierwszego zadania, z drugim miałem problem, ponieważ program nie chciał zapisywać odp w pliku .txt . Wyskakują mi pewne errory i chciałbym się do was zwrócić o pomoc: 

yt: https://www.youtube.com/watch?v=oklmPgH-ooA

kod: 

#include <iostream>
#include <fstream>
#include <vector>
#include <windows.h>
#include <conio.h>
#include <map>
using namespace std;

int main()
{
    fstream dane;
    ifstream input("sygnaly.txt");
    ofstream output("wynik.txt");
    vector<string> Dane;
       {    // <---- Sprawdzanie czy Plik jest dobrze czytany

      //  if(dane.good()== false)
     //  {
     //       cout<< "Plik zostal zle wczytany!";
     //       exit(0);
      //  }
      //  else {cout<< "Plik zostal dobrze wczytany! (automatyczne usowanie wiadomosci za 4s)"<< endl;Sleep(4000); system("cls");}
       // }
            string temp;

            while(input>>temp)
            {
                Dane.emplace_back(temp);
            }
          
//Zadanie 4.1
            string przeslanie;

            for(int i=39; i < Dane.size();i +=40)
            {
                przeslanie += Dane[i][9];
            }
            output << "Zadanie 4.1 : " << przeslanie<< endl;
//Zadanie 4.2
                vector<map<char,int>> liczniki;

                    for(int i=0; i < Dane.size(); i++)
                    {
                         liczniki.emplace_back();
                            for(int j=0;j<Dane.size(); j++)
                            {
                                liczniki[i][Dane[i][j]]++;
                            }
                    }
                int Max = 0;
                int index = -1;
                     for (int i = 0; i < liczniki.size(); i++)
                     {
                         if(liczniki[i].size() > Max)
                         {
                             Max = liczniki[i].size();
                             index = i;
                         }
                     }
            output << "Zadanie 4.2 : " << Dane[index]<< "oraz liczba znakow:" <<Max<< endl;


    //getchar();
    return 0;
}
}

W kodzie są moje notatki + to co sam sobie wymyśliłem, że ma niby 'fajnie' wyglądać (to sprawdzanie) proszę zignorujcie to ;D 

Error jaki mi wyskakuje: comparison between signed and unsigned integer expressions [-Wsign-compare]| (jest ich dokładnie 5) 

Dodam, że wiem iż muszę w ustawieniach kompilera zaznaczyć żeby czytał wersję 11, ale nie mogę zaznaczyć 2 na raz, wie ktoś może dlaczego?

komentarz 20 lutego 2019 przez criss Mędrzec (172,570 p.)

Error jaki mi wyskakuje: comparison between signed and unsigned integer expressions [-Wsign-compare]

To na pewno error, nie warning? Anyway... jest napisane z czego wynika

Dodam, że wiem iż muszę w ustawieniach kompilera zaznaczyć żeby czytał wersję 11, ale nie mogę zaznaczyć 2 na raz

Ale co byś chciał 2 na raz? Nie rozumiem 

komentarz 20 lutego 2019 przez Tr0liK Nowicjusz (180 p.)

W komentarzach pod owym filmikiem, ktoś podpowiedział co trzeba zrobić, żeby móc używać funkcji emplace_back, że w opcjach kompilatora trzeba zaznaczyć dwie opcje odnośnie standardu C++11. Chodzi o te dwie opcje, jednakże gdy chcę zaznaczyć drugą to ta pierwsza się odznacza automatycznie. Proszę podejdź do mnie z cierpliwością jeżeli w ogóle masz zamiar, bo ja naprawdę jestem zielony, dodatkowo jeżeli możesz to odnośnie tych warning'ów jak słusznie mnie poprawiłeś, to co mogę w kodzie zmienić by one nie występowały?

1 odpowiedź

0 głosów
odpowiedź 20 lutego 2019 przez VirtualMember Pasjonat (15,790 p.)

O warningi na maturze się nie przejmuj - kod tam ma być napisany tak by działał, te ostrzeżenia jak np. to:

" comparison between signed and unsigned integer expressions "

wynikają z tego, że porównujesz między sobą dwie rzeczy różnych typów (int ze znakiem i bez). Często możesz spotkać się z podobnymi warningami gdzie np. masz funkcję, która zwraca floata, ale w ciele funkcji robisz coś takiego:

return M_PI * coś

(M_PI to stała Pi, reprezentowana jako double)

Wyskoczy ci warning, że w tym miejscu double obcinasz double do floata i być może tracisz część istotnych dla ciebie informacji.

Jeżeli wiesz, że "dokładniejsze" informacje wynikające z precyzji obu zmiennych nie są Tobie potrzebne możesz rzutować te zmienne np.:

return static_cast<float>(M_PI * coś)

wówczas warning Tobie zniknie ale oczywiście rób tak jeśli wiesz, że faktycznie jesteś świadom konsekwencji przy obcinaniu zmiennych.

Tak jak mówiłem na początku, na maturze zasady czystego kodu się nie liczą, ani też czy wyskakują Tobie jakieś drugorzędne warningi czy nie. Jeżeli tylko nie mają negatywnego wpływu na program, olej to. A to czy mają czy nie musisz ocenić sam aczkolwiek tutaj na to nie wygląda.

Bardzo dobry komentarz padł w uwadze do filmu, możesz wziąć to sobie do serca:

Poza tym pare uwag: widze, że starasz się pisać kod bardzo "poprawnie", wszystko ładnie ponazywane, linie odstępu, ładnie nawiasy klamrowe, do tego komentarze zarówno w kodzie jak i w wynikach... nikogo to nie obchodzi. Nie, naprawdę. Fakt, że właśnie w taki "ładny, poprawny" sposób powinno się pisać jest wręcz w całym systemie edukacji maksymalnie zaniedbany.

komentarz 20 lutego 2019 przez Tr0liK Nowicjusz (180 p.)
Dzięki, jednakże chodzi o to, że one chyba coś psują w tym programie, ponieważ nie chce on zapisywać odpowiedzi do pliku .txt I właściwie tego dotyczy całe moje pytanie, bo nie wiem czy jest to wina nieaktualnego kompilatora, czy tego że w tym kodzie jest ewentualny błąd. Odpowiedź do pierwszego pytania, zapisuje się poprawnie, a do drugiego już nie bardzo :/

Podobne pytania

0 głosów
0 odpowiedzi 498 wizyt
pytanie zadane 1 listopada 2022 w Bezpieczeństwo, hacking przez Sygnał07 Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 1,104 wizyt
pytanie zadane 11 marca 2021 w C i C++ przez Mikołaj Jaszowski Nowicjusz (120 p.)
0 głosów
1 odpowiedź 289 wizyt
pytanie zadane 26 maja 2020 w Systemy operacyjne, programy przez init_29 Nowicjusz (160 p.)

93,800 zapytań

142,768 odpowiedzi

323,461 komentarzy

63,421 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...