Problém s kontrolou. – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Problém s kontrolou. – C / C++ – Fórum – Programujte.comProblém s kontrolou. – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
vamvam0
Newbie
11. 3. 2016   #1
-
0
-

#include "scitanido25.h"
#include "ui_scitanido25.h"
scitanido25::scitanido25(QWidget *parent) :
QDialog(parent),
ui(new Ui::scitanido25)
{
ui->setupUi(this);
}
scitanido25::~scitanido25()
{
delete ui;
}
int arr[25];
int ara[25];
int i;
void scitanido25::on_pushButton_clicked()
{
for (i = 0; i < 25; i++)
{
arr[i] = rand() % 25;
ara[i] = rand() % 25;
ui->label_2->setNum(arr[i]);
ui->label_4->setNum(ara[i]);
int vysledek=arr[i]+ara[i];
ui->label_5->setNum(vysledek);

QString(tra);
tra=ui->lineEdit->text();
if(vysledek == tra)
{
ui->label_6->setText("Výborně");
}
}
}


Zdravím vás! :)

V podržené podmínce mám chybu: invalid conversion from 'int' to 'const char*' [-fpermissive]

Vážně mě nenapadá, jak bych měl udělat to, když prom. "tra" je const a vysledek právě nechci, aby byl const. protože jak je vidět, jsou to náhodné příklady do 24 čísla.

prom. "tra" být konstatní k vůli lineEditu předpokládám musí, jinak mě to nepustilo.

Nějaké nápady jak bych tohle mohl vyřešit? Děkuji předem!! :)

Nahlásit jako SPAM
IP: 79.170.253.–
Reklama
Reklama
hlucheucho+10
Posthunter
11. 3. 2016   #2
-
0
-

Jaký datový typ má tra? Podle přiřazení v řádku nad podmínkou asi řetězec, to by mohl být ten const char* a vysledek je int. Vypadá to, že se pokoušíš porovnat neporovnatelné.

Edit:   Asi je potřeba text z Edit převést na číslo a porovnávat čísla nebo naopak výsledek převést na řetězec a porovnávat řetězce - jejich obsah, nikoliv ukazatele.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
vamvam0
Newbie
11. 3. 2016   #3
-
0
-

#2 hlucheucho
No to já vím, že se snažím porovnat něco co k sobě nemá a právě proto se ptám, jestli někdo neví, jak to zapsat tak, aby se to dalo porovnat. (K porovnání to co uživatel napíše do lineEditu, aby se vztahovalo k součtu 2 rand čísel.) Příklad: 1+18 = 19(uživatel napsal) a jakmile odsuhlasí, zkontroluje se podmínka, zda to tak opravdu je a poté změní label_6 na text "Výborně".

EDIT(k editu): No a to je to, víte jak můžu převést int vysledek na řetězec, aby se to mohlo porovnat? To právě já netuším.

Nahlásit jako SPAM
IP: 79.170.253.–
hlucheucho+10
Posthunter
11. 3. 2016   #4
-
0
-

Asi mu vypíšeš zadání např. 1 + 18 =  a očekáváš odpověď 19 (tedy číslo). Toto číslo načteš do proměnné int a porovnáš se součtem daných čísel. Pokud Edit->text() je const char* nebo char* lze použít funkci atoi nebo sscanf. Pokud je to nějaká class (string apod.) hledal bych v dokumentaci její metody pro převod řetězec - číslo.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
vamvam0
Newbie
11. 3. 2016   #5
-
0
-

#4 hlucheucho
To byl příklad jak to má fungovat, to mají být náhodné příklady == náhodné výsledky, které se mají porovnávat s určitým výsledkem toho příkladu.

No.. Asi jsem slepej, nebo neumím číst, ale nevidím to tam nikde. Myslíte, že by jste se mi na to vašim odborným okem kouknul?   doc.qt.io/qt-5/qstring.html#at

Kdyžtak děkuji za dosavadní pomoct popřípadě i za tuhle pomoct předem.

Nahlásit jako SPAM
IP: 79.170.253.–
hlucheucho+10
Posthunter
11. 3. 2016   #6
-
0
-

   

int odpoved;
char znak;

odpoved = vysledek + 1;
if( (1 == sscanf(ui->lineEdit->text(), "%i%c", &odpoved, &znak)) && (odpoved == vysledek) )
{
   //spravne
}
else
{
   //spatne
}

Za předpokladu, že ui->lineEdit->text(); je char*

hu

Nahlásit jako SPAM
IP: 195.178.67.–
hlucheucho+10
Posthunter
11. 3. 2016   #7
-
0
-

Vygeneruji dvě náhodná čísla, spočítám jejich součet a z čísel vytvořím řetězec ( ve tvaru "číslo1 + číslo2 = ?" např "15 + 8 = ?"), který uživateli vypíšu a očekávám jeho odpověď. Tu zkonvertuju na číslo a porovnám se součtem. Ukázka konverze a porovnání je už docela "trotl fest" způsob, který jiné než čistě "číselné" odpovědi považuje za chybné.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
hlucheucho+10
Posthunter
11. 3. 2016   #8
-
0
-

   

char dotaz[128];
char odpoved[128];
int a = rand() % 25;
int b = rand() % 25;
int soucet = a + b;
sprintf(dotaz, "%i + %i = ?", a, b);
//vypises dotaz a vyckas na odpoved

int cislo = soucet + 1;
if( (1 == sscanf(odpoved, "%i%c", &cislo, &znak)) && (cislo == vysledek) )
{
   //spravne
}
else
{
   //spatne
}
Nahlásit jako SPAM
IP: 195.178.67.–
vamvam0
Newbie
11. 3. 2016   #9
-
0
-

#8 hlucheucho
Jo, děkuji mnohokrát, ale jak jsem právě posílal tak to není char*, je to prostě QString();

"doc.qt.io/qt-5/qstring.html#at" jak jsem posílal nahoře odkaz, tak ten je vlastně k informaci o tom přípkazu QString a tam jsem právě nemohl najít ten "převodník", jak bych tomu nazval.

Ale ještě jednou děkuji mnohokrát za aktivní odpověď. :)

Nahlásit jako SPAM
IP: 79.170.253.–
hlucheucho+10
Posthunter
11. 3. 2016   #10
-
0
-

QString je class, mimo jiné má metodu toInt:

http://doc.qt.io/qt-5/qstring.html#toInt

samotná funkce nabízí konverzi odolnou proti "cizím" znakům. Pak jen stačí prosté porovnání čísel.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
vamvam0
Newbie
11. 3. 2016   #11
-
0
-

#10 hlucheucho
No, jelikož to na mě stále křičí, tak tedy opravdu nevím kde je problém. :-(

Chyba: cannot convert 'QString' to 'const char*' for argument '1' to 'int sscanf(const char*, const char*, ...)'
 

Chyba: invalid conversion from 'int' to 'const char*' [-fpermissive]
 

Nahlásit jako SPAM
IP: 79.170.253.–
peter
~ Anonymní uživatel
2551 příspěvků
11. 3. 2016   #12
-
0
-

 cislo na qstring, se ti muze taky hodit

        ui->textEdit->append(QString::number(myTimer->next())+ " read2 phase1");
Nahlásit jako SPAM
IP: 2001:718:2601:26c:1129:4c...–
hlucheucho+10
Posthunter
11. 3. 2016   #13
-
0
-

   

int cislo = ui->lineEdit->text().toInt()


metody se volají způsobem instance.metoda(parametry) nebo ukazatel_na_instanci->metoda(paremetry)

Edit: jsem zapomněl na parametry metody.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
hlucheucho+10
Posthunter
11. 3. 2016   #14
-
0
-

   

bool jeOK;

int cislo = ui->lineEdit->text().toInt(&jeOK, 10);
if(jeOK && (cislo == soucet))
{
   //spravne
}
else
{
   //spatne
}


hu

Nahlásit jako SPAM
IP: 195.178.67.–
vamvam0
Newbie
11. 3. 2016   #15
-
0
-

#14 hlucheucho
Wow jo, děkuji mnohokrát!! :) Funguje, sice ještě musím přijít na pár věcí, třeba jak to dát na 2 tlačítka, ale tak na to snad příjdu.

Děkuji mnohokrát za pomoct. Rep+

Nahlásit jako SPAM
IP: 79.170.253.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 86 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý