Was ist hier falsch? [C]

SuperCow

Admiral Special
Mitglied seit
11.11.2001
Beiträge
1.318
Renomée
1
printf("%f", (x>y) ? ((y>z)?y:((x>z)?z:x))) : ((x>z)?x:((y>z)?z:y));
______________________________________________________________
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
nkap.c:
Error E2256 nkap.c 14: No : following the ? in function main
*** 1 errors in Compile ***
______________________________________________________________


Was ist denn falsch? Ich will rausfinden, welche Zahl in der "Mitte" liegt...
Ich erkenne aber keinen Fehler? Darf man die Anweisungen denn nicht so ineinander verschachteln?

EDIT: Bin noch blutiger Anfänger... :(
 
Hm,
solche Dinger werden eigentlich nicht gern gesehen. Wenn du da nach 2 Monaten wieder nachschauen sollst was das Ding macht, wird das richtig anstrengend...

exr
 
Jaja. Ich wollte das nur mal üben :) So schwer ist das gar nicht, wenn man sich die Mühe macht und einen Baum zeichnet

und bei so einem kleinen Programm :) Außerdem ist es ja dokumentiert :D

#include <stdio.h>

void main(void) {
float zahl1, zahl2, zahl3;
printf("\n\n\n\tZ a h l e n r e i h e n f o l g e");
printf("\n\n\nErste Zahl: ");
scanf("%f", &zahl1);
printf("Zweite Zahl: ");
scanf("%f", &zahl2);
printf("Dritte Zahl: ");
scanf("%f", &zahl3);
printf("\nklein --> gross : %f, %f, %f\n",
(zahl1<zahl2) ? ((zahl1<zahl3) ? zahl1 : zahl3) : ((zahl2<zahl3) ? zahl2 : zahl3), // ermittelt kleinste Zahl
(zahl1>zahl2) ? ((zahl2>zahl3) ? zahl2 : ((zahl1>zahl3) ? zahl3 : zahl1)) : ((zahl1>zahl3) ? zahl1 : ((zahl2>zahl3) ? zahl3 : zahl2)), //ermittelt die dazwischenliegende Zahl
(zahl1>zahl2) ? ((zahl1>zahl3) ? zahl1 : zahl3) : ((zahl2>zahl3) ? zahl2 : zahl3)); // ermittelt größte Zahl
}
 
wie was baum, für mich sieht das so aus als wenn man eine zahl ausgibt, und dann umständlich die stellen vor und nach dem komma festlegt
 
Das wäre der Baum für die "dazwischengelegene" Zahl...
baum.JPG


Meinte jetzt nich so einen Baum :)
baum.jpg


Ps.: Wie macht man das mit den Kommastellen? Das würde mich echt interessieren! :)
 
Zuletzt bearbeitet:
PHP:
/* ermittelt die Reihenfolge dreier Zahlen */

#include <stdio.h>

void main(void) {
	float zahl1, zahl2, zahl3;

	printf("\n\n\n\tZ a h l e n r e i h e n f o l g e");
	printf("\n\n\nErste Zahl: ");
	scanf("%f", &zahl1);
	printf("Zweite Zahl: ");
	scanf("%f", &zahl2);
	printf("Dritte Zahl: ");
	scanf("%f", &zahl3);
	
	if (zahl1!=zahl2 && zahl2!=zahl3 && zahl3!=zahl1) { // Sind alle drei Zahlen unterschiedlich?
		printf("\nklein --> gross : %f, %f, %f\n",
			(zahl1<zahl2) ? ((zahl1<zahl3) ? zahl1 : zahl3) : ((zahl2<zahl3) ? zahl2 : zahl3), // ermittelt kleinste Zahl
			(zahl1>zahl2) ? ((zahl2>zahl3) ? zahl2 : ((zahl1>zahl3) ? zahl3 : zahl1)) : ((zahl1>zahl3) ? zahl1 : ((zahl2>zahl3) ? zahl3 : zahl2)), //ermittelt die dazwischenliegende Zahl 
			(zahl1>zahl2) ? ((zahl1>zahl3) ? zahl1 : zahl3) : ((zahl2>zahl3) ? zahl2 : zahl3)); // ermittelt größte Zahl
	}
	else if ((zahl1==zahl2 && zahl1!=zahl3 && zahl2!=zahl3) || (zahl1==zahl3 && zahl1!=zahl2 && zahl3!=zahl2) || (zahl2==zahl3 && zahl2!=zahl1 && zahl3!=zahl1)) { // sind vll. 2 Zahlen gleich?
		printf("2 Zahlen sind gleich!\n\n");
		printf("klein --> gross: %f, %f",
			(zahl1<zahl2) ? ((zahl1<zahl3) ? zahl1 : zahl3) : ((zahl2<zahl3) ? zahl2 : zahl3), // ermittelt kleinere Zahl
			(zahl1>zahl2) ? ((zahl1>zahl3) ? zahl1 : zahl3) : ((zahl2>zahl3) ? zahl2 : zahl3)); // ermittelt größere Zahl
	}
	else if (zahl1==zahl2 && zahl2==zahl3 && zahl3==zahl1) { // sind etwa alle drei Zahlen gleich?
		printf ("Alle drei Zahlen gleich!");
	}
	else {
		printf("Ungueltige Eingabe!");
	}
}

Mein Programm ist soweit gediehen... :) Wie kann ich jedoch überprüfen, ob meine Variablen Buchstaben und keine Zahlen enthalten? Falls ich nämlich einen Buchstaben eingebe, setzt er ab diesem Zeitpunkt abzufragende Variablen automatisch 0. Wie kann ich das Programm aber kontrolliert abbrechen? Sry, falls ich nerve... :)

Wie kann ich also kontrolliere, ob Buchstben eingegeben worden sind?
 
Zuletzt bearbeitet:
ne while schleife .. bis in dem abzufragenden wert mal ne zahl drin steht bzw. keine 0
oder man machts mit char werten, zahlen 0-9 und noch ne menge ascii zeichen .. so kann man auch die buchstaben der größe ordnen
 
Uhm... und ich dachte mein Stiel wäre grausam.

Meinst du nicht, dass das deutlich besser lesbar ist?

PHP:
#include <stdio.h>

void swapv(float *a, float *b)
{ float i=*a; *a=*b; *b=i; }

int main(void) {
	float number[3];
	int i, j, k=0;
	
	printf("\n\n\n\tZ a h l e n r e i h e n f o l g e");
	
	// get the values
	for(i=0;i<3;i++) 
	{
		printf("\n%ld. Zahl: ", i+1);
		scanf("%f", &number[i]);
	}
	
	// make a bubblesort
	for(i=0;i<3;i++) 
		for(j=0;j<2;j++) if(number[j]>number[j+1]) swapv(&number[j],&number[j+1]);

	// count equal values and print values
	for(i=0;i<3;i++) 
	{
		printf("\n%f", number[i]);
		for(j=0;j<3;j++) if(number[i]==number[j]) k++;
	}
	
	switch(k)
	{
		case 3*3:	// all equal
				break;
		case 5:	        // 2 equal
				break;
		default:	// none equal, k=3
				break;
	}
		
	printf("\n");
	return 0;
}

variabler und kürzer ist es außerdem auch ;)
 
Hey! Ich kann noch keine Schleifen :)

Dein Stiel ist ganz in Ordnung :D (Stil)
 
Zuletzt bearbeitet:
Noch ne kleine Frage:


Ich hab mal

for(;;)

eingegeben. Das erzeugt ja eine Endlosschleife. Warum bekomme ich aber so keine 100% Prozessorauslastung, sondern nur um ca. 92%?
Ich hab da mal was mit niedrigerer Priorität gehört. HAt das vll. damit etwas zu tun?
 
Zuletzt bearbeitet:
Ja, hat es. Gib dem Programm Realtime Priorität (bzw. unter Linux +19) und du wirst Mühe haben das Prog wieder beenden zu können ;)
 
Bei Linux kann man das aber nur als root? ??? :)
 
Ich weiß, dass das jetzt nichts kompliziertes ist und ihr euch bestimmt mit interessanteren Sachen beschäftigt, ich hätte aber dennoch eine Frage. Vll. kann man den Code um vereinfachen oder besser schreiben, darum gehts mir jetzt aber nicht primär. Mein Compiler bringt mir zu diesem Code:


PHP:
#include <stdio.h>

main() {
	int zeile, spalte;
	
	// erste Dreieckhälfte
	for(zeile=1; zeile<=10; zeile++) {        // Zeile 9
		spalte=1;
		printf("\n");
		for(spalte; spalte<=zeile; spalte++) {
			printf("*");
		}
	}
	
	printf("\n");
	
	// zweite Dreieckhälfte
	for(zeile=0; zeile<=10; zeile++) {         // Zeile 18
		spalte=10;
		for(spalte; spalte>=zeile; spalte--) {
			printf("*");
		}
		printf("\n");
	}
	
	printf("\n");
	return 0;
}

folgende Warnung:

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
dreieck.c:
Warning W8019 dreieck.c 9: Code has no effect in function main
Warning W8019 dreieck.c 18: Code has no effect in function main
Error E2194: Could not find file ',txt.cpp'

Warum bringt er mir die zwei Warnings? Etwa weil er nicht weiß, was in den Variablen drinsteht?
 
Zuletzt bearbeitet:
Original geschrieben von SuperCow
Ich weiß, dass das jetzt nichts kompliziertes ist und ihr euch bestimmt mit interessanteren Sachen beschäftigt, ich hätte aber dennoch eine Frage. Vll. kann man den Code um vereinfachen oder besser schreiben, darum gehts mir jetzt aber nicht primär. Mein Compiler bringt mir zu diesem Code:


PHP:
#include <stdio.h>

main() {
	int zeile, spalte;
	
	// erste Dreieckhälfte
	for(zeile=1; zeile<=10; zeile++) {
		spalte=1;
		printf("\n");
		for(spalte; spalte<=zeile; spalte++) {
			printf("*");
		}
	}
	
	printf("\n");
	
	// zweite Dreieckhälfte
	for(zeile=0; zeile<=10; zeile++) {
		spalte=10;
		for(spalte; spalte>=zeile; spalte--) {
			printf("*");
		}
		printf("\n");
	}
	
	printf("\n");
	return 0;
}

folgende Warnung:



Warum bringt er mir die zwei Warnings? Etwa weil er nicht weiß, was in den Variablen drinsteht?

PHP:
spalte=1;
printf("\n");
for(spalte; spalte<=zeile; spalte++) {

Da liegt das Problem. Entweder

PHP:
printf("\n");
for(spalte=1; spalte<=zeile; spalte++) {

oder

PHP:
spalte=1;
printf("\n");
for(; spalte<=zeile; spalte++) {
 
Danke! :) War ein Denkfehler meinerseits. Ich hab vergessen, das spalte zurückgesetzt wird.
 
Zurück
Oben Unten