Hi,
ich hab's jetzt mal so versucht:
#include <stdio.h>
int main()
{
float a;
printf (Wert für a eingeben: );
scanf (%f,&a);
if (a==int(a))
printf (\nInhalt von a ist %f,a);
else
printf (\n a ist kein Integer);
return 0;
}
weil ich ja zwei = brauche, damit es ein Vergleich und keine Wertzuweisung ist, aber mein Compiler meldet einen ParseError vor int, also geht es so scheinbar nicht.
Ich kriege in einer Funktion meines Programms aber auch eine Speicherzugriffsverletzung, wenn ich Werte einlesen will (siehe FEHLER =>):
# include <stdio.h>
# define g 10
float read(float f[g][g+1],int a)
{
int z,s;
printf (\nType in the values of your %d equations as follows:\n,a);
for (z=0;z<a;z++)
{
printf (\n%d: A*X+B*Y+....+N=0 (press q to abort)\n,z+1);
for (s=0;s<a-1;s++)
{
printf (\nValue %c for %d. equation: ,65+s,z+1); // 65=ASCII-Code für A
FEHLER => scanf (%f,f[z]
);
if (f[z]=='q')
{
printf (program aborted!!!);
return 0;
}
}
printf (\nValue N for %d. equation:,z+1); //Extraaufruf, weil Absolutglied-Buchstabe
scanf (%f,f[z][s+1]);
if (f[z][s+1]=='q')
{
printf (program aborted!!!);
return 0;
}
}
return 0;
}
Die zugehörigen Zeilen zum Aufrufen der Funktion in Main sind folgende:
int main ()
{
float f[g][g+1],c[2][g+1],a=0;
int n,i,e=-1;
printf (\nNumber of Unknowns (<=%d):,g);
scanf (%d,&n);
if (n>g||n<=0)
{
printf (\nWrong input, program aborted!!!\n\n);
return 0;
}
read(f,n);
.....
}
Der Durchlauf des Programms bis zum Abbruch sieht ungefähr so aus:
EXECUTING:
/home/cateye/programming/Gleichung
----------------------------------------------
Number of Unknowns (<=10):2
Type in the values of your 2 equations as follows:
1: A*X+B*Y+....+N=0 (press q to abort)
Value A for 1. equation: 2
----------------------------------------------
Program has been terminated receiving signal 11 (Segmentation fault)
Press the Enter key to close this terminal ...
Ich kann aber keine logischen Fehler feststellen und der Compiler läuft auch durch (unter Windoze wird nichtmal der Quelltext gefunden, obwohl ich die Datei durch Rechtsklick über den Compiler geöffnet, bearbeitet und unter neuem Namen gespeichert habe ) Das Feld wird der Funktion genau in den Abmessungen übergeben, in der die Funktion es nehmen soll und die Beschränkung der Bearbeitung auf einzelne Bereiche des Feldes erfolgt innerhalb der Funktion selbst. Nur wenn ich an der markierten Stelle in der Funktion angekommen bin, kommt der Fehler Segmentation Fault, also Speicherzugriffsverletung. Ich hab auch schon versucht, die Variable g an den entsprechenden Stellen direkt durch die 10 zu ersetzen, aber das bringt auch nichts. Habt ihr irgendwelche Ideen?