# [C] Werten eine einheit geben.



## Grabbi3 (18. Oktober 2012)

Guten Abend zusammen ich habe da ein kleines Problem und zwar möchte ich dem Widerstand die Einheit Ohm,und dem Strom die Einheit 
Ampere zuordnen aber leider weiß ich nicht wie das geht kann mir da jemand helfen ?



```
#include <stdio.h>
#include <stdlib.h>

main()
{
      int Spannung, Widerstand, Strom ;
     
   
     
      printf ("Bitte geben sie den Widerstand ein:R=");
      scanf ("%d",&Widerstand);
      printf("Bitte geben sie den Strom ein:I=");
      scanf("%d",&Strom);
      Spannung = Widerstand * Strom;
      printf ("\nDer Spannungsabfall an dem Widerstand betraegt U=%dV\n\n",Spannung);
      system ("pause");
      }
```

Also ich möchte das dort dann steht R=x Ohm
und I=x A
aber Irgendwie steht bei mir egal was ich mache immer nur R= Ohmx

hoffe ihr könnt mir weiter helfen


----------



## -Phoenix- (18. Oktober 2012)

Moin, 

du willst einfach eine Ausgabe machen wo steht R = x Ohm und I = x A ?

```
printf("R = %d Ohm ",Widerstand) ;
```
oder meinst du etwas anderes ?

Lg.


----------



## Freddycbv (18. Oktober 2012)

Willst du folgendes Ausgeben?:
"Geben sie die Spannung ein: x V" (x wird durch die Eingabe ersetzt)

Das Problem von scanf() ist, dass nach der Eingabe automatisch ein Zeilenumbruch folgt ('\n')
Ich kenne keine Möglichkeit, das zu umgehen, außer selbst schreiben 
Hab mal schnell was geschrieben, zur Eingabe von integern oder floats (mit dahinterstehendem Einheitszeichen)
Zur Eingabe von Int's:

```
#include <stdio.h>
#include <conio.h>
#include <math.h>
unsigned int LeseIntMitEinheit(const char * Einheit, bool VerbieteKeineEingabe = false)
{
    int Wert = 0;
    int i = 0;
    bool Set = false;
    while(1)
    {
        if(Set) printf("%i%s",Wert,Einheit); else printf("%s",Einheit);
        for(int j = 0; j < i + strlen(Einheit); j++) printf("\b");

        char Eingabe;
        Eingabe = getch();
        if( (Eingabe == 13 || Eingabe == ' ')  && !(VerbieteKeineEingabe && !Set) )
        {
            break;
        }
        else if(Eingabe >= '0' && Eingabe <= '9')
        {
            if(Eingabe == '0' && !Set)
                continue;
            Wert = Wert *10 + Eingabe - 48;
            Set = true;
            i++;
        }
    }
    if(Set)printf("%i%s\n",Wert,Einheit); 
    else printf("Keine Eingabe\n"); 
    return Wert;
}
int main()
{
    printf("Ganzzahlige Eingabe: ");
    int Wert2 = LeseIntMitEinheit(" Autos", true);
    printf("%d\n",Wert2);
    return 0;
}
```
und zur eingabe von doubles:
	
	



```
#include <stdio.h>
#include <conio.h>
#include <math.h>
double LeseDoubleMitEinheit(const char * Einheit, bool VerbieteKeineEingabe = false)
{
    double Wert = 0;
    bool EingabeGemacht = false;
    
    printf("%s", Einheit); //Einheit drucken
    for(int i = 0; i < strlen(Einheit); i++) printf("\b"); //i Stellen zurückgehen
    
    int PointSet = 0; //Wie viele Stellen hinter Null stehen
    while(1) //Eingabeschleife
    {
        bool Set = false;
        char Eingabe;
        
        while(!Set)
        {
            Eingabe = getch(); //Eingabe
            if((Eingabe == 13 || Eingabe == ' ') && !(VerbieteKeineEingabe && !EingabeGemacht ) ) // Leerzeichen, oder Enter gedrückt?
                break;
            else if((Eingabe == ',' || Eingabe == '.') && !PointSet ) // Punkt gedrückt?
            {
                PointSet++; //eine Stelle hinter dem Komma vorrücken
                Set = true;
            }
            else if(Eingabe >= '0' && Eingabe <= '9') // Zahl gedrückt?
            {
                if(PointSet) //hinter .
                {
                    Wert +=  (Eingabe-48) / pow(10,(float)PointSet);
                    PointSet++; //eine Stelle hinter dem Komma vorrücken
                }
                else //vor dem .
                    Wert = Wert *10 + (Eingabe - 48);
                
                Set = true; //Zeichen gesetzt!
                EingabeGemacht = true;
            }
        } if(!Set) break; // Fall, wenn Leerzeichen oder Enter gedrückt wurde => Raus aus der Eingabeschleife

        //Zahl Zeichnen
        if(Set) printf("%c%s",Eingabe,Einheit);
        for(int i = 0; i < strlen(Einheit); i++) printf("\b");
    }
    if(EingabeGemacht)printf("%s\n", Einheit); 
    else printf("Keine Eingabe\n"); 
    return Wert;
}
int main()
{
         printf("Spannung: ");
         double Wert = LeseDoubleMitEinheit("V", true);
         printf("%f\n",Wert);
         return 0;
}
```
Der zweite Parameter ist jeweils optimal, und verhindert, dass "leere" Eingaben gemacht werden können
Es können allerdings nur positive Werte eingelesen werden, negative werden von dem code nicht akzeptiert.
Kann sein, dass ich dein Anliegen aber auch falsch verstanden hab


----------



## Grabbi3 (18. Oktober 2012)

Ahh vielen vielen dank funktioniert genau so wie es soll


----------

