Wie programmiere ich einen Zähler in C?

5 Antworten

also ich würde es so lösen:

#include <stdio.h>

int main(){
  int Zahl, a;
  
  printf("Eingabe:");
  scanf("%d", Zahl);
  
  do{
    a = a + 1;
    printf("Ihre Zahl ist größer als: %d", a); 
  }while(a != Zahl);
  printf("Ihre Zahl ist: %d", a);
}

Ich habe den Code aber nicht überprüft, bei Fehlern oder Verständnisproblemen, melde dich einfach :)

LG

Woher ich das weiß:eigene Erfahrung – Mehrere Jahre Erfahrung mit Computern

MRMINEDE  01.05.2020, 20:13

man sollte aus schönheitsgründen natürlich jeweils nach dem Ausgaben von a einen Zeilenumbruch machen

1
Ldlslsld 
Fragesteller
 01.05.2020, 20:16

Hey,

Vielen Dank aber ich kriege die Meldung, dass es kann leider nicht ausgeführt werden kann. Der Fehler ist, dass die nicht initialisierten Variablen Zahl und a verwendet wurden.

1
MRMINEDE  01.05.2020, 20:18
@Ldlslsld

Die Korrigierte Fassung:

#include <stdio.h>

int main(){
  int Zahl, a = 0;
  
  printf("Eingabe:");
  scanf("%d", &Zahl);
  
  do{
    a = a + 1;
    printf("Ihre Zahl ist größer als: %d", a); 
  }while(a != Zahl);
  printf("Ihre Zahl ist: %d", a);
}
1
Ldlslsld 
Fragesteller
 01.05.2020, 20:21
@MRMINEDE

Jetzt steht da, dass die nicht initialisierte Variable „Zahl“ verwendet wurde

1
MRMINEDE  01.05.2020, 21:01
@Ldlslsld

Bei mir funktioniert es, hast du einen Tippfehler gemacht? Oder irgendwas verändert?

1
Ldlslsld 
Fragesteller
 01.05.2020, 22:09
@MRMINEDE

Ich hätte da eine Frage. Warum hast du bei printf("Ihre Zahl ist größer als:.... angegeben? Ich will dass man beim Programm eine Zahl eintippen kann. Und dann soll von 0 auf die eingegebene Zahl hochgezählt werden. Und solange die Zahl nicht erreicht wurde soll die Schleife wiederholt werden.
Tut mir leid falls du den Code bereits so gemacht hast.

LG

0
MRMINEDE  01.05.2020, 22:17
@Ldlslsld

Das Programm macht alles so, wie es soll, aber ich habe noch einen Counter hinzugefügt um die Übersicht zu behalten und weil die Schleife sonst sehr unnötig wäre.

So etwas ist generell besser mit einer for Schleife zu regeln:

int a, Zahl;

printf("Zahl:");
scanf("%d", Zahl);

for(a = 0; a < Zahl;a++)
  printf("was auch immer in der Schleife passieren soll, hier geht es. Ich counte, wie oft die Schleife bereits durchlaufen ist\nNummer:%d", a + 1);

printf("fertig");
1
Ldlslsld 
Fragesteller
 03.05.2020, 16:06
@MRMINEDE

Es funktioniert vielen Dank. Wofür steht eigentlich das %d? Ist es für double? Warum benutzt man kein %i eigentlich?

0
MRMINEDE  03.05.2020, 16:07
@Ldlslsld

Ich benutze als Platzhalter für integer-Werte immer %d, habe ich so gelernt :)

0
Pilsvergiftung  02.05.2020, 05:13

Das ist leider fehlerhaft. Stell dir mal vor, jemand gibt "0" ein.

Außerdem sollte man Variablen IMMER initialisieren, um Sicherheitslücken vorzubeugen.

Wenn ich bei deinem Code z. B. ein "a" eingebe, schlägt scanf() fehl,, was du mangels Fehlerbehandlung aber nicht mitbekommt, wodurch die Variable "Zahl" weiterhin uninitialisiert ist, und einen zufälligen Wert haben kann.

Die Folge ist eine Schleife, die durchaus einige Milliarden mal printf() aufruft, bevor sie abbricht.

Bei Servercode ist so etwas verheerend, und ermöglicht DoS Attacken.

Also ... Variablen IMMER initialisieren (im obigen Falle mit "0") und IMMER auf Fehler beim Aufruf ALLER Funktionen prüfen.

Und zum Testen IMMER erst Grenzfälle prüfen! Dann kann auch nichts mehr schief gehen. :)

1
MRMINEDE  02.05.2020, 11:50
@Pilsvergiftung

Ist mir 2 Minuten später auch aufgefallen, aber ich bin mal davon ausgegangen, dass es hier einfach nicht nötig ist, weil der Benutzer ja weiß, was er eingeben muss.

Also ... Variablen IMMER initialisieren

Das ist eine sehr gute Idee, danke dafür, wird mir die Fehlersuch in Zikunft bestimmt erleichtern!

1

Nein.
int main()

{

int zahl;

int i = 0;

printf( “Bis zur welche Zahl soll ich zaehlen?“);
scanf_s(“%d“, & zahl);

do {

i = i + 1;

} while (i <=zahl);

printf(“zahl %d\n“, zahl);

}

zähler initialisieren;
do{
   zähler inkrementieren;
}while(zähler < grenzwert);

Das Ganze bildest Du nun auf die C Sntax ab.


Ldlslsld 
Fragesteller
 01.05.2020, 19:34

#include <iostream>

int main()

{

int zahl;

int i = 0;

printf( “Bis zur welche Zahl soll ich zaehlen?“);

do {

i = i + 1;

scanf_s(“%d“, & zahl);

} while (i = 0 <=zahl);

printf(“zahl %d\n“, zahl);

}

so?

0
KarlRanseierIII  01.05.2020, 20:01
@Ldlslsld

Nö, und was willst mit iostream bei C?

Du willst die Zahl (Grenze) natürlich VOR der Schleife einlesen.

0
Hier mal ein sehr ähnliches Beispiel:

int alter;

do {
    printf("\nBitte geben sie ihr Alter ein: ");
    scanf("%d", &alter);
} while(alter <  5 || alter > 100);

printf("Danke.\n");

Ldlslsld 
Fragesteller
 01.05.2020, 19:10

das hat mir leider nicht richtig weitergeholfen

0
IchMalWiederXY  01.05.2020, 19:11
@Ldlslsld

Wie weit ist dein Programm bereits ? Welche Entwicklungsumgebung verwendest du ?

0
Ldlslsld 
Fragesteller
 01.05.2020, 19:17
@IchMalWiederXY

ich arbeite mit visual studios.
#include <iostream>

int main()

{

int zahl;

int i;

do {
printf( “Bis zur welche Zahl soll ich zaehlen?“);

scanf_s(“%d“, & zahl);

} while (i = 0 <=zahl);

printf(“zahl %d\n“, zahl);

}

0
IchMalWiederXY  01.05.2020, 19:24
@Ldlslsld

Dein
printf( “Bis zur welche Zahl soll ich zaehlen?“);
solltest du vor die Schleife setzen, sonst muss du dies immer wieder eingeben und somit kommt das Ding nicht zum Ende. UND du musst noch die Zeile
i = i + 1 in der Schleife platzieren, damit irgendwann die Abbruchbedinung erfüllt sein kann. ..und ..
int i=0;
do{ 
  } while (i <=zahl); 

0
Ldlslsld 
Fragesteller
 01.05.2020, 19:33
@IchMalWiederXY

#include <iostream>

int main()

{

int zahl;
int i = 0;

printf( “Bis zur welche Zahl soll ich zaehlen?“);

do {

i = i + 1;

scanf_s(“%d“, & zahl);

} while (i = 0 <=zahl);

printf(“zahl %d\n“, zahl);

}

so?

0