zwei aufeinanderfolgende zahlen in einem char-array richtig programmieren?

2 Antworten

Das Abbruchkriterium in

for(int i=0;i!='\0';i++) 

ist falsch. '\0' ist das gleiche wie 0, die Schleife wird also nie durchlaufen.

Selbst text[i] != '\0' würde nicht funktionieren. Einmal, weil Dein Text nicht mit '\0' abgeschlossen ist und auch, weil Du auf text[i+1] zugreifen willst. Das wäre dann schon hinter der '\0'.

Am besten wäre es, wenn das rufende Programm die Länge des Textes als Argument übergibt. Alternativ könnte man den Text mit '\0' abschließen und die Länge mit strlen(text) ermitteln.

Wozu die Variable temp gebraucht wird, ist mir auch unklar.

Nachtrag:

Da istZiffer(text[i]) für '\0' immer 0 zurückgibt, wird dann istZiffer(text[i+1]) nicht gerufen. Das ginge also gut, aber sowas macht man trotzdem nicht.


BeJe16 
Fragesteller
 27.03.2023, 13:39

wie kann ich das denn mit dem nullptr machen?

0
tunik123  27.03.2023, 13:51
@BeJe16
char t[]={'a','b','1','1'};

enthält genau vier Zeichen. Besser wäre hier

static const char t[] = {'a','b','1','1'};

Aber

static const char t2[] = "ab11";

enthält fünf Zeichen, nämlich noch eine binäre '\0' am Ende.


1

Dein Quellcode

#include <stdio.h>

#include <stdlib.h>

int istZiffer(char zeichen){

if('0'<=zeichen && zeichen <='9'){

  return 1;

}

return 0;

}

int ziffernHintereinander(char text[]){

  int temp=0;

  for(int i=0;i!='\0';i++){

    if(istZiffer(text[i])==1 && istZiffer(text[i+1])==1){

      temp=1;

      return temp;

    }

  }

  return temp;

}

int main(){

  char t[]={'a','b','1','1'};

  printf("%d" ,ziffernHintereinander(t));

  

}
Ist das Java++ oder stamme ich als Diosaurier aus einer anderen Zeit?
Woher ich das weiß:Berufserfahrung – Softwareentewickler / Unternehmensberater bei CSDIT iR

wunschname0302  27.03.2023, 12:55

Das ist C. z. B. zu sehen an den #include Zeilen für den Präprozessor.

1