Chybové hlášky skrz scanf – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Chybové hlášky skrz scanf – C / C++ – Fórum – Programujte.comChybové hlášky skrz scanf – C / C++ – Fórum – Programujte.com

 

labuzník
~ Anonymní uživatel
11 příspěvků
16. 3. 2013   #1
-
0
-

Čau kluci, už několik hodin se tu snažím dojít na to, proč mi neustále konečné scanf háže chybu a nikdy neukončí program. Háže to plno chyb, teď momentálně "Unhandled exception at 0x0fa814cf (msvcr100d.dll) in cpp_6.exe: 0xC0000005: Access violation reading location 0x0000006e." Zkoušel jsem různě měnit %s za %c a akorát to háže jinou chybu.. Fakt už si nevím rady

Kód zde


#include "stdafx.h"
#include "Debug\complexmath.h"
#include <math.h>
#include <stdio.h>
#include <stdlib.h>


int _tmain(int argc, _TCHAR* argv[])
{
char start= '\0';
do
{
double x_re, x_im, y_re, y_im, r_re=0,r_im=0;
char oper='\0',znam='+',znamm='+',znammm='+';
int i;
printf("\n1st operand\nInsert real part: ");
scanf("%Lf", &x_re);
printf("Insert imag. part: ");
scanf("%Lf", &x_im);
printf("\n2st operand\nInsert real part: ");
scanf("%Lf", &y_re);
printf("Insert imag. part: ");
scanf("%Lf", &y_im);
printf("\nInsert operator: ");
scanf("%s", &oper);

switch (oper)
{
case '+':
    kmplx_secteni(&r_re, &r_im, x_re, x_im, y_re, y_im);
    break;
case '-':
    kmplx_odecteni(&r_re, &r_im, x_re, x_im, y_re, y_im);
    break;
case '/':
    kmplx_deleni(&r_re, &r_im, x_re, x_im, y_re, y_im);
    break;
case '*':
    kmplx_nasobeni(&r_re, &r_im, x_re, x_im, y_re, y_im);
    break;
}
if (x_im>0)
  znam='-';
if (y_im>0)
  znam='-';
if (r_im>0)
  znam='-';
printf("\n(%f %c j%f) %c (%f %c j%f) = %f %c j%f", x_re, znam, fabs(x_im), oper, y_re, znamm, fabs(y_im),r_re,znammm, fabs(r_im));
printf("\nIf you want to close program, insert y, if no, insert other character: ");
scanf("%s", &start);
printf("%s", start);
} while(start !='n');
}
Nahlásit jako SPAM
IP: 176.74.128.–
vitamin+8
Grafoman
16. 3. 2013   #2
-
0
-

#1 labuzník
 

%Lf  - long double
%lf  - double
%f   - float
%s   - char*     //string ukonceny s '\0'
%c   - char
Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Matrix17
~ Anonymní uživatel
300 příspěvků
16. 3. 2013   #3
-
0
-

#1 labuzník
Načítáš ty "stringy" špatně. Protože char* je vlastně ukazatel ne proměnná a ty předáváš scanf adresu proměnný, tj. u intu je to v pořádku ale u ukazatele tam musíš dát přímo ukazatel, ne jeho adresu.

Mělo by to být takhle:

char *slovo[50];
scanf("%s", slovo);
Nahlásit jako SPAM
IP: 213.226.237.–
Matrix17
~ Anonymní uživatel
300 příspěvků
16. 3. 2013   #4
-
0
-

#3 Matrix17
Tu hvězdičku u charu tam mám navíc. Samozřejmě jen char slovo[50]; ostatní je správně.

Nahlásit jako SPAM
IP: 213.226.237.–
labuzník
~ Anonymní uživatel
11 příspěvků
16. 3. 2013   #5
-
0
-

Když to udělám takhle, tak mi to zas háže chybu, když chci načíst ten operator "The variable 'oper' is being used without being initialized."

Nahlásit jako SPAM
IP: 176.74.128.–
labuzník
~ Anonymní uživatel
11 příspěvků
16. 3. 2013   #6
-
0
-

Tak to už jsem vyřešil měl jsem špatně napsané scanf("%s", oper[0]);  --> scanf("%s", oper);

Teď to po stisku n, pro ukončení aplikace hodí hlášku "Run-Time Check Failure #2 - Stack around the variable 'oper' was corrupted."

Nahlásit jako SPAM
IP: 176.74.128.–
labuzník
~ Anonymní uživatel
11 příspěvků
16. 3. 2013   #7
-
0
-

   

int _tmain(int argc, _TCHAR* argv[])
{
	char start[1];
	do
	{
	double x_re, x_im, y_re, y_im, r_re=0,r_im=0;
	char oper[1],znam='+',znamm='+',znammm='+';
	int i;
	printf("\n1st operand\nInsert real part: ");
	scanf("%Lf", &x_re);
	printf("Insert imag. part: ");
	scanf("%Lf", &x_im);
	printf("\n2st operand\nInsert real part: ");
	scanf("%Lf", &y_re);
	printf("Insert imag. part: ");
	scanf("%Lf", &y_im);
	printf("\nInsert operator: ");
	scanf("%s", oper);
	switch (oper[0]) 
	{
	case '+':
    kmplx_secteni(&r_re, &r_im, x_re, x_im, y_re, y_im);
    break;
	case '-':
    kmplx_odecteni(&r_re, &r_im, x_re, x_im, y_re, y_im);
    break;
	case '/':
    kmplx_deleni(&r_re, &r_im, x_re, x_im, y_re, y_im);
    break;
	case '*':
    kmplx_nasobeni(&r_re, &r_im, x_re, x_im, y_re, y_im);
    break;
	}
	if (x_im>0)
		znam='-';
	if (y_im>0)
		znam='-';
	if (r_im>0)
		znam='-';
	printf("\n(%f %c j%f) %s (%f %c j%f) = %f %c j%f", x_re, znam, fabs(x_im), oper, y_re, znamm, fabs(y_im),r_re,znammm, fabs(r_im));
	printf("\nIf you want to close program, insert y, if no, insert other character: ");
	scanf("%s", start);
	} while(start[0]!='n');
}
Nahlásit jako SPAM
IP: 176.74.128.–
KIIV
~ Moderátor
+43
God of flame
16. 3. 2013   #8
-
0
-

oper mas jako string... o delce 1... kam se vejde maximalne ukoncovaci znak... cokoliv dalsiho uz prepisuje pamet za sebou (coz ti mimochodem ta chybova hlaska presne rika)

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
labuzník
~ Anonymní uživatel
11 příspěvků
16. 3. 2013   #9
-
0
-

Jasně! Máš pravdu, omlouvám se za moji blbost. Moc děkuji, vyřešeno, funguje!

Nahlásit jako SPAM
IP: 176.74.128.–
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, 40 hostů

Podobná vlákna

PHPMailer - chybové hlášky — založil pr0gr4mm3r

Vlastné chybové hlášky — založil walda

Moderátoři diskuze

 

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