WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Designer Forum (http://www.wcm.at/forum/forumdisplay.php?f=61)
-   -   C Gauge: Der Zeiger des VSI will nicht!!! (http://www.wcm.at/forum/showthread.php?t=101376)

harry3 06.07.2003 16:58

Du hast bei deinem letzten code geschrieben:
if(strlen(wert))

Da scheint durchs Forum wieder mal was verschwunden sein, oder!?

if(strlen(wert) == 5) {} ...mit 5 müssten sich ja dann die 4 Zahlen darstellen lassen, oder?


Viele Grüße,
Harri:cool:

HansHartmann 06.07.2003 17:23

das "if(strlen(wert))" entspricht "if(strlen(wert) != 0)". Das ergibt sich dadurch, dass in C/C++ 0 dem Wert false und alles andere true entspricht. Funktioniert also.

5 würden für 4 Zahlen (plus \0) ausreichen.

<< "C:\\Programme\\Microsoft Games\\FS2002\\Gauges\vsi.txt" >>

Da fehlt noch ein Backslash vor "vsi.txt". Könnte es das sein?

harry3 06.07.2003 18:38

Hallo Hans!
 
Nein, den backslash hab ich sonst immer gehabt...hab ich nur jetzt im Forum vergessen. Kann es sein dass das Leerzeichen bei Microsoft Games Probleme bereitet???

Das Gauge selbst funktioniert aber auch noch nicht ganz einwandfrei: Leider erzeugt der code immer noch 5 Fehler und 2 Warnungen.

Viele Grüße,
Harri:cool:


#include <stdio.h>
#define datei "gauge.txt"

FILE *pfile;
char wert[4];

pfile=fopen(datei, "r");

//existiert Datei?
if(pfile)
{
fscanf(pfile,"%s",wert);
//steht was drin?
if(strlen(wert))
{
farbe_max=atoi(wert);
farbe_min= - atoi(wert);
}

fclose(pfile);
}

HansHartmann 06.07.2003 19:43

Wie wäre es mit folgender Variante:

#include [stdio.h] // durch spitze Klammern ersetzen
#define datei "gauge.txt" // Keine Pfadangabe = FS2002-Pfad!!!

int farbe_max, farbe_min;
FILE *f

// Schreiben
f = fopen(datei, "w");
if (f)
{
printf(f, "%d", farbe_max);
fclose(f); // fclose() nur dann, wenn fopen() geklappt hat
}

// Lesen
f = fopen(datei, "r");
if (f)
{
fscanf(f, "%d", &farbe_max);
farbe_min = -farbe_max;
fclose(f); // fclose() nur dann, wenn fopen() geklappt hat
}

Wenn Du trotzdem atoi() einsetzen willst, dann musst Du die stdlib.h noch mit includen.

harry3 06.07.2003 19:59

Hallo!
 
Danke für den Code, aber es ist immer noch der gleiche erste Error:
Da muss der Fehler doch irgendwo anders liegen, denn sowohl mein Code(der in Turbo C++ gut funktioniert), Arne's Code und dein Code fangen mit dem gleichen Error an...:rolleyes:

error C2040: 'f' : 'int ' differs in levels of indirection from 'struct _iobuf *'


mfg
harri:cool:

bartels 06.07.2003 20:02

Könntest Du eventuell zu dem Error auch die Zeilennummern im Code angeben? Damit wir wissen zu welcher Zeile welcher Error gehört.
Arne Bartels

harry3 06.07.2003 20:04

Voila'
 
Von MSDN-zum error:


Compiler Error C2040
'operator' : 'identifier1' differs in levels of indirection from 'identifier2'

An expression involving the specified operator had inconsistent levels of indirection.

If both operands are of arithmetic type or if both are not (such as array or pointer), then they are used without change. If one operand is arithmetic, but the other is not, the arithmetic operator is converted to the type of the other operator.

//-------------------------------------------------------



C:\Programme\Microsoft Visual Studio\MyProjects\vs3\subgauges\vsi_gauge.c(44) : error C2040: 'f' : 'int ' differs in levels of indirection from 'struct _iobuf *'
C:\Programme\Microsoft Visual Studio\MyProjects\vs3\subgauges\vsi_gauge.c(44) : error C2099: initializer is not a constant
C:\Programme\Microsoft Visual Studio\MyProjects\vs3\subgauges\vsi_gauge.c(45) : error C2059: syntax error : 'if'
C:\Programme\Microsoft Visual Studio\MyProjects\vs3\subgauges\vsi_gauge.c(215) : warning C4554: '&' : check operator precedence for possible error; use parentheses to clarify precedence
C:\Programme\Microsoft Visual Studio\MyProjects\vs3\subgauges\vsi_gauge.c(221) : warning C4554: '&' : check operator precedence for possible error; use parentheses to clarify precedence
C:\Programme\Microsoft Visual Studio\MyProjects\vs3\subgauges\vsi_gauge.c(233) : warning C4554: '|' : check operator precedence for possible error; use parentheses to clarify precedence
C:\Programme\Microsoft Visual Studio\MyProjects\vs3\subgauges\vsi_gauge.c(283) : warning C4554: '|' : check operator precedence for possible error; use parentheses to clarify precedence
Error executing cl.exe.

vs3.gau - 3 error(s), 4 warning(s)

bartels 06.07.2003 20:15

Ne ich meinte im Code dazu auch irgendwie die Zeilennummern anbringen, es reicht ja eine zu Beginn dann kann man weiterzählen.
Übrigens Hans' code funktioniert im Wesentlichen:
Code:

#include &lt;stdio.h&gt;
#define datei "gauge.txt" // Keine Pfadangabe = FS2002-Pfad!!!
int farbe_max=3000, farbe_min=-3000;
FILE *f;
// Schreiben
f = fopen(datei, "w");
if (f)
{
fprintf(f, "%d", farbe_max);
fclose(f); // fclose() nur dann, wenn fopen() geklappt hat
}

// Lesen
f = fopen(datei, "r");
if (f)
{
fscanf(f, "%d", &farbe_max);
farbe_min = -farbe_max;
fclose(f); // fclose() nur dann, wenn fopen() geklappt hat
}

Arne Bartels

harry3 06.07.2003 20:17

ich hab dir die zeile 34 angezeichnet!
direkt unter //schreiben


#include <stdio.h>
#define datei "gauge.txt" // Keine Pfadangabe = FS2002-Pfad!!!
int farbe_max=3000, farbe_min=-3000;
FILE *f;
// Schreiben
34.)f = fopen(datei, "w");
if (f)
{
fprintf(f, "%d", farbe_max);
fclose(f); // fclose() nur dann, wenn fopen() geklappt hat
}

// Lesen
f = fopen(datei, "r");
if (f)
{
fscanf(f, "%d", &farbe_max);
farbe_min = -farbe_max;
fclose(f); // fclose() nur dann, wenn fopen() geklappt hat
}

bartels 06.07.2003 20:22

Ist das #include oder #include &lt;stdio.h&gt; ?
Arne Bartels


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag