Programmieren: Hilfe & Austausch
05.12.2011 um 00:19Hallo miteinander!
Zuerst einmal will ich anmerken das ich noch C-Neuling bin und bitte um etwas Gnade.;)
Ich erstelle gerade ein Programm in C, das Dezimalzahlen in Oktalzahlen und umgekehrt
umrechnen können soll mithilfe des Horner-Schemas. Zudem soll es unbrauchbare Eingaben wie z.b. Buchstabenketten erkennen und aussortieren.
Ich habe nun folgende Probleme:
1. Bei der Auswahl des ersten Menüpunktes funktioniert die Rechnung einwandfrei nur der Überlauf will nicht hinhauen, trotz: if (zwischenwert <= UINT_MAX)
2. Bei der Umrechnung von oktal in dezimal gibt mir das Programm unbrauchbare Ergebnisse aus und ich finde den Fehler partout nicht.
Der Code sieht bis jetzt so aus:
#include <stdio.h>
#include <conio.h>
#include <limits.h>
int main(int argc, char *argv[])
{
unsigned int dezimalzahl, ausgangswert, zwischenwert;
int auswahl=1;
int stelle, fehler = 0, pruefung;
char oktal[12]={0};
while (auswahl!=3)
{
printf(" Dezimalsytem => Oktalsystem Oktalsystem => Dezimalsystem.\n\n\n");
printf("Waehlen Sie bitte aus, was Sie zunaechst tun moechten (1-3) :\n\n");
printf(" <1>. Konvertierung vom Dezimalsystem zum Oktalsystem\n");
printf(" <2>. Konvertierung vom Oktalsystem zum Dezimalsystem\n");
printf(" <3>. Programm beenden.\n\n");
scanf("%d", &auswahl);
switch(auswahl)
{
case 1:
oktal[11]='\0';
stelle = 10;
printf("Geben Sie eine positive ganze Dezimalzahl ein: ");
pruefung = (scanf("%ld", &zwischenwert));
if (pruefung == 1)
{
if (zwischenwert <= UINT_MAX)
{
ausgangswert = zwischenwert;
while (zwischenwert != 0)
{
dezimalzahl = zwischenwert;
zwischenwert = zwischenwert / 8;
dezimalzahl = dezimalzahl % 8;
oktal[stelle] = dezimalzahl + '0';
stelle--;
}
printf("\n%ld dezimal entspricht im Oktalsystem der Zahl %s\n\n", ausgangswert, &oktal[stelle+1]);
printf("\n\n\n\n\n\n\n\n\n");
}
else printf("\nDie eingegebene Zahl ist zu gross!\n\n");
}
else printf("\nSie haben Buchstaben eingegeben, geben Sie Zahlen ein!\n\n");
break;
case 2:
oktal[12] = 0 ;
stelle = 0;
printf("Geben Sie eine Oktalzahl ein: ");
scanf("%11s", &oktal);
for (stelle = 0; oktal[stelle] ; ++stelle )
{
if (oktal[stelle] >= '0' && oktal[stelle] <= '7')
dezimalzahl = 8 * dezimalzahl + (oktal[stelle] - '0');
else fehler = 1;
}
if (fehler == 1)
{
printf("\nFehlerhafte Eingabe! Eine Oktalzahl besteht aus den Ziffern 0-7!\n");
printf("Wiederholen Sie die Eingabe\n\n\n\n\n\n\n\n\n\n\n");
}
else printf("\nDie oktale Zahl %s entspricht %ld im Dezimalsystem.\n\n\n\n\n\n\n\n\n\n\n", oktal, dezimalzahl);
break;
case 3: break;
default: printf("\nBitte geben Sie eine Zahl zwischen 1 und 3 ein.\n\n\n\n\n\n\n\n\n\n\n");
}
}
}
Ich benutze Visual Studio 2008
Danke schon mal im vorraus!:)
Zuerst einmal will ich anmerken das ich noch C-Neuling bin und bitte um etwas Gnade.;)
Ich erstelle gerade ein Programm in C, das Dezimalzahlen in Oktalzahlen und umgekehrt
umrechnen können soll mithilfe des Horner-Schemas. Zudem soll es unbrauchbare Eingaben wie z.b. Buchstabenketten erkennen und aussortieren.
Ich habe nun folgende Probleme:
1. Bei der Auswahl des ersten Menüpunktes funktioniert die Rechnung einwandfrei nur der Überlauf will nicht hinhauen, trotz: if (zwischenwert <= UINT_MAX)
2. Bei der Umrechnung von oktal in dezimal gibt mir das Programm unbrauchbare Ergebnisse aus und ich finde den Fehler partout nicht.
Der Code sieht bis jetzt so aus:
#include <stdio.h>
#include <conio.h>
#include <limits.h>
int main(int argc, char *argv[])
{
unsigned int dezimalzahl, ausgangswert, zwischenwert;
int auswahl=1;
int stelle, fehler = 0, pruefung;
char oktal[12]={0};
while (auswahl!=3)
{
printf(" Dezimalsytem => Oktalsystem Oktalsystem => Dezimalsystem.\n\n\n");
printf("Waehlen Sie bitte aus, was Sie zunaechst tun moechten (1-3) :\n\n");
printf(" <1>. Konvertierung vom Dezimalsystem zum Oktalsystem\n");
printf(" <2>. Konvertierung vom Oktalsystem zum Dezimalsystem\n");
printf(" <3>. Programm beenden.\n\n");
scanf("%d", &auswahl);
switch(auswahl)
{
case 1:
oktal[11]='\0';
stelle = 10;
printf("Geben Sie eine positive ganze Dezimalzahl ein: ");
pruefung = (scanf("%ld", &zwischenwert));
if (pruefung == 1)
{
if (zwischenwert <= UINT_MAX)
{
ausgangswert = zwischenwert;
while (zwischenwert != 0)
{
dezimalzahl = zwischenwert;
zwischenwert = zwischenwert / 8;
dezimalzahl = dezimalzahl % 8;
oktal[stelle] = dezimalzahl + '0';
stelle--;
}
printf("\n%ld dezimal entspricht im Oktalsystem der Zahl %s\n\n", ausgangswert, &oktal[stelle+1]);
printf("\n\n\n\n\n\n\n\n\n");
}
else printf("\nDie eingegebene Zahl ist zu gross!\n\n");
}
else printf("\nSie haben Buchstaben eingegeben, geben Sie Zahlen ein!\n\n");
break;
case 2:
oktal[12] = 0 ;
stelle = 0;
printf("Geben Sie eine Oktalzahl ein: ");
scanf("%11s", &oktal);
for (stelle = 0; oktal[stelle] ; ++stelle )
{
if (oktal[stelle] >= '0' && oktal[stelle] <= '7')
dezimalzahl = 8 * dezimalzahl + (oktal[stelle] - '0');
else fehler = 1;
}
if (fehler == 1)
{
printf("\nFehlerhafte Eingabe! Eine Oktalzahl besteht aus den Ziffern 0-7!\n");
printf("Wiederholen Sie die Eingabe\n\n\n\n\n\n\n\n\n\n\n");
}
else printf("\nDie oktale Zahl %s entspricht %ld im Dezimalsystem.\n\n\n\n\n\n\n\n\n\n\n", oktal, dezimalzahl);
break;
case 3: break;
default: printf("\nBitte geben Sie eine Zahl zwischen 1 und 3 ein.\n\n\n\n\n\n\n\n\n\n\n");
}
}
}
Ich benutze Visual Studio 2008
Danke schon mal im vorraus!:)