Thread View: de.comp.lang.c++
6 messages
6 total messages
Started by Frank Kulok
Tue, 12 Sep 1995 11:16
MaxonC++light
Author: Frank Kulok
Date: Tue, 12 Sep 1995 11:16
Date: Tue, 12 Sep 1995 11:16
28 lines
1468 bytes
1468 bytes
Hallo,
ich hab hier ein kleines Problem, solange ich die beiden
SCANF-Routinen nicht mit einbaue läuft das Programm
einwandfrei. Baue ich sie mit ein und lasse sie mit dem
MaxonC++light Compiler V3.00.00, 31.10.94 übersetzen
und starten, steigt der Rechner nach der Eingabe der
ersten scanf-funktion aus. Wo mache ich den Fehler?
#include <stdio.h>
#include <math.h>
void main()
{
//Variablendeklaration
float sz=600,tt=430,svm;
// Eingabe
printf ("Geben Sie den Wert für die Zugspannung in N/mm^2 ein: ");
// scanf ("%f", &sz);
printf ("und den Wert für die Verdrehspannung in N/mm^2: ");
// scanf("%f", &tt);
// Verarbeitung
svm=sqrt(pow(sz,2)+3*pow(tt,2));
// Ausgabe
printf("Die sich daraus ergebende Vergleichsspannung ist: %10.3f N/mm^2",svm);
}
Re: MaxonC++light
Author: Ralf W. Stephan
Date: Mon, 18 Sep 1995 12:16
Date: Mon, 18 Sep 1995 12:16
10 lines
682 bytes
682 bytes
Frank Kulok writes: > Wo mache ich den Fehler? Compilerbug (traue nie einer Version *0)? Mit g++ funktioniert es jedenfalls. Tip: Verwende statt scanf lieber fscanf(stdio,...) oder, schließlich hast Du ja C++, Streams. ralf
Re: MaxonC++light
Author: Karl-Heinz Krause
Date: Thu, 21 Sep 1995 16:10
Date: Thu, 21 Sep 1995 16:10
37 lines
1711 bytes
1711 bytes
Frank@konnex.bergisch-land.sub.de (Frank Kulok) schrieb:
>Hallo,
>ich hab hier ein kleines Problem, solange ich die beiden
>SCANF-Routinen nicht mit einbaue läuft das Programm
>einwandfrei. Baue ich sie mit ein und lasse sie mit dem
>MaxonC++light Compiler V3.00.00, 31.10.94 übersetzen
>und starten, steigt der Rechner nach der Eingabe der
>ersten scanf-funktion aus. Wo mache ich den Fehler?
>#include <stdio.h>
>#include <math.h>
>void main()
>{
> float sz, tt, svm;
> printf ("Geben Sie den Wert für die Zugspannung in N/mm^2 ein: ");
> scanf ("%f", &sz);
> printf ("und den Wert für die Verdrehspannung in N/mm^2: ");
> scanf("%f", &tt);
>
> // usw.
>}
Es handelt sich nicht um einen Compiler-Bug, sondern um einen
Programmfehler. Bei einem Formatelement "%f" muß der entspechende
Parameter den Typ double haben (und nicht float). Es reicht also, die
erste Zeile von "main" zu ersetzen durch
double sz, tt, sym;
Daß es bei GNU funktioniert, liegt daran, daß der GNU-Compiler die
Formatstrings überprüft, was aber nicht normal ist bei C++.
-- Karl-Heinz
Re: MaxonC++light
Author: Arno Eigenwillig
Date: Sat, 23 Sep 1995 09:59
Date: Sat, 23 Sep 1995 09:59
27 lines
1566 bytes
1566 bytes
Hallo!
Frank@konnex.bergisch-land.sub.de (Frank Kulok) schrieb am 12.09.1995
in <wVZZZMD0aez2@holly.konnex.bergisch-land.sub.de>:
> ich hab hier ein kleines Problem, solange ich die beiden
> SCANF-Routinen nicht mit einbaue läuft das Programm
> einwandfrei. Baue ich sie mit ein
> steigt der Rechner nach der Eingabe der
> ersten scanf-funktion aus.
> // scanf ("%f", &sz);
> // scanf("%f", &tt);
Was genau heißt "steigt aus"? Mit SAS/C kompiliert und obigen scanf()s
drin läuft das Programm bei mir problemlos. Ein häufiges Problem mit
scanf() ist aber, daß es auf Fehleingaben etc. recht bockig reagiert.
Die Kombination fgets()/sscanf() ist in 99% aller Fälle vorzuziehen.
-- __
__/// Arno Eigenwillig // <arno@yaps.rhein.de> \\ PGP key available
\XX/ V+49-2225-5870 // <ARNO@BIGBEN.dssd.sub.org> \\ <Arnooo @ IRC>
Those who can, do.
Those who can't, teach.
Those who can't teach, teach gym.
Re: MaxonC++light
Author: Karl-Heinz Krause
Date: Sun, 24 Sep 1995 08:52
Date: Sun, 24 Sep 1995 08:52
57 lines
2388 bytes
2388 bytes
Am 21. Sept. schrieb ich folgenden Unsinn:
>Frank@konnex.bergisch-land.sub.de (Frank Kulok) schrieb:
>
>>Hallo,
>>ich hab hier ein kleines Problem, solange ich die beiden
>>SCANF-Routinen nicht mit einbaue läuft das Programm
>>einwandfrei. Baue ich sie mit ein und lasse sie mit dem
>>MaxonC++light Compiler V3.00.00, 31.10.94 übersetzen
>>und starten, steigt der Rechner nach der Eingabe der
>>ersten scanf-funktion aus. Wo mache ich den Fehler?
>
>>#include <stdio.h>
>>#include <math.h>
>
>>void main()
>>{
>> float sz, tt, svm;
>
>> printf ("Geben Sie den Wert für die Zugspannung in N/mm^2 ein: ");
>> scanf ("%f", &sz);
>
>> printf ("und den Wert für die Verdrehspannung in N/mm^2: ");
>> scanf("%f", &tt);
>>
>> // usw.
>>}
>
>Es handelt sich nicht um einen Compiler-Bug, sondern um einen
>Programmfehler. Bei einem Formatelement "%f" muß der entspechende
>Parameter den Typ double haben (und nicht float). Es reicht also, die
>erste Zeile von "main" zu ersetzen durch
>
> double sz, tt, sym;
>
>Daß es bei GNU funktioniert, liegt daran, daß der GNU-Compiler die
>Formatstrings überprüft, was aber nicht normal ist bei C++.
>
Ich entschuldige mich hiermit dafür. Selbstverständlich wird bei "%f"
float und bei "%lf" double verwendet. Ich habe hier scanf mit printf
verwechselt. Bei printf wird ein float-Argument automatisch zu double
erweitert, so daß es egal ist, ob man "%f" oder "%lf" schreibt.
Falls es sich um einen DOS- (oder WIN16-)Compiler handelt, so könnte der
Fehler daran liegen, daß die falsche Zeigergröße angenommen wird.
Versuche einmal
scanf("%f", (float near*)&sz);
oder
scanf("%f", (float far*)&sz);
je nach Speichermodell.
mfg. Karl-Heinz
Re: MaxonC++light
Author: Bernd Rothert
Date: Tue, 26 Sep 1995 11:25
Date: Tue, 26 Sep 1995 11:25
34 lines
1735 bytes
1735 bytes
>Programmfehler. Bei einem Formatelement "%f" muß der entspechende >Parameter den Typ double haben (und nicht float). Es reicht also, die "%f" ist fuer die scan- und print-Funktionen unterschiedlich definiert: scanf erwartet fuer "%f" einen Zeiger auf float printf erwartet fuer "%f" einen double-Wert Der Unterschied erklaert sich aus der Behandlung der Ellipse, die zur Deklaration der variablen Parameter verwendet wird: Ist fuer einen aktuellen Parameter kein formaler Parameter definiert (hier alle Parameter hinter dem Formatstring), so werden implizite Typumwandlungen erzeugt, die aus float double machen. Die print-Funktionen erhalten also nur double-Werte. Deshalb reicht "%f" fuer float und double. Die scan-Funktionen erhalten Zeiger auf die zu fuellenden Puffer. Dabei muss zwischen "%f" (float) und "%lf" (double) unterschieden werden. Das Programm ist also korrekt - der Compiler hat (mindestens) einen Bug. Gruss, Bernd --------------------------------------------------------------------------- Bernd Rothert Institute of Robotics Research University of Dortmund 44221 Dortmund, Germany e-mail: rothert@damon.irf.uni-dortmund.de ---------------------------------------------------------------------------
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads