Mein Problem ist folgendes: Wenn ich im unten stehenden Quellcode nur die Variabel "Ramtakt" (und im scanf das dazugehörige %f) entferne, kommt bei der Eingabe von "200 266 667 15" im kompilierten Code was komplett anderes raus, als bei der Eingabe von "200 266 *beliebige Zahl außer 0* 667 15" im Code mit "Ramtakt". (Ich hatte die Variabel erst, dann ist mir jedoch aufgefallen, dass wohl niemand seinen RAM unter der Maximaltaktung laufen lassen wird bzw. sie überflüssig für das Programm ist, nur aus dem scanf krieg ich die einfach nicht raus)
Hat irgendjemand eine Idee, wie eine Variabel, in die nur etwas geschrieben aber danach nie wieder daraus gelesen/damit gearbeitet wird, durch ihr Fehlen ein Ergebnis komplett verändern kann?
Hat irgendjemand eine Idee, wie eine Variabel, in die nur etwas geschrieben aber danach nie wieder daraus gelesen/damit gearbeitet wird, durch ihr Fehlen ein Ergebnis komplett verändern kann?
Code:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int RAMTaktungen[4] = {533, 667, 800, 1066}, RAMTaktungenzaehler = 4;
float FSB, FSBneu, FSBneu2, FSBhoechsttakt, FSBWunsch, CPU, CPUWunsch, CPUneu, Multiplikator, CPUQuotient, Ramteiler, Ramteiler2, Ramtakt, Ramneu, Ramhoechsttakt;
printf("Geben Sie den Standart-FSB, FSB-Hoechsttakt, RAM-Takt, RAM-Hoechsttakt und CPU-Takt oder Multiplikator durch Leerzeichen getrennt ein.\n");
scanf("%f%f%f%f%f", &FSB, &FSBhoechsttakt, &Ramtakt, &Ramhoechsttakt, &CPU);
fflush(stdin);
if(CPU < 50)
{
Multiplikator = CPU;
CPU = Multiplikator * FSB;
Ramteiler = Ramhoechsttakt / 2 / FSB;
}
else
{
Multiplikator = CPU / FSB;
Ramteiler = Ramhoechsttakt / 2 / FSB;
}
SPRUNGMARKE: ;
RAMTaktungenzaehler = 3;
printf("Nennen Sie die gewuenschte CPU- oder FSB-Taktung: (\"0\" fuer Beenden)\n");
scanf("%f", &CPUWunsch);
if(CPUWunsch == 0)
return EXIT_SUCCESS;
if(CPUWunsch < 500)
{
FSBWunsch = CPUWunsch;
CPUWunsch = FSBWunsch * Multiplikator;
}
CPUQuotient = CPUWunsch / CPU;
CPUneu = CPU * CPUQuotient;
FSBneu = FSB * CPUQuotient;
Ramneu = Ramhoechsttakt * CPUQuotient;
printf("Der neue FSB betraegt: %.2fMHz. Der neue RAM-Takt betraegt: %.2fMHz. Der neue CPU-Takt betraegt: %.2fMHz.\n", FSBneu, Ramneu, CPUneu);
if(FSBneu > FSBhoechsttakt)
printf("!!! Warnung: Der FSB-Hoechsttakt wird ueberschritten !!!\n");
if(Ramneu > Ramhoechsttakt)
{
printf("!!! Warnung: Der RAM-Hoechsttakt wird ueberschritten !!!\n");
while(Ramneu > Ramhoechsttakt && RAMTaktungenzaehler >= 0)
{
Ramteiler2 = RAMTaktungen[RAMTaktungenzaehler-1] / FSB;
Ramneu = FSBneu * Ramteiler2;
RAMTaktungenzaehler--;
}
if(RAMTaktungenzaehler >= 0)
printf("Es wird vorgeschlagen, den RAM vor dem Uebertakten auf %dMHz zu takten. In diesem Fall waere der neue RAM-Takt bei %.2fMHz.\n", RAMTaktungen[RAMTaktungenzaehler], Ramneu);
else
{
RAMTaktungenzaehler = 3;
while(RAMTaktungen[RAMTaktungenzaehler / 2] > FSB)
RAMTaktungenzaehler--;
RAMTaktungenzaehler += 20;
FSBneu2 = Ramhoechsttakt / 2 /(RAMTaktungen[RAMTaktungenzaehler] / 2 / FSB);
printf("Der mit diesem Board und RAM hoechste moegliche FSB betraegt %.2fMHz (CPU: %.2fMHz, bei %dMHz RAM-Takt)\nBei niedrigster Taktung wuerde der RAM-Takt jetzt %.2fMHz betragen.\n", FSBneu2, FSBneu2 * Multiplikator, RAMTaktungen[RAMTaktungenzaehler], FSBneu * RAMTaktungen[RAMTaktungenzaehler] / FSB);
}
}
printf("\n\n\n\n\n");
goto SPRUNGMARKE;
return EXIT_SUCCESS;
}