String



  • Beispiel (ungetestet):

    char nr[] = "49927398716";
    int i;
    int sum = 0;
    int doppelt = 0;
    int zwi;
    
    for(i = strlen(nr); i; )
    {
      --i;
      zwi = nr[i] - '0';
    
      if(doppelt)
      {
        zwi = zwi * 2;
        if(zwi > 9)
        {
          sum += 1;
          zwi %= zwi;
        }
      }
      sum += zwi;
      doppelt = !doppelt;
    }
    
    printf("sum = %d\n", sum);
    


  • Belli hast du whatsapp oder so,da ich die nächsten tage jetzt fürs Studium noch 3 weitere Programme programmieren muss, würde ich es ganz cool finden wenn du mir, wenn fragen aufkommen sollten helfen könntest 🙂 meine mail aderesse: focusscherz@web.de falls du whatsapp hast und mir deine nummer geben würdest oder ich gebe dir meine.



  • char nr[] = "49927398716";
    


  • Hallo kscherz,

    in der Aufgabe steht doch gar nicht drin, daß du einen neuen String erzeugen sollst, sondern du sollst einfach die Summe bilden (d.h. dieser ganze Thread hier ist völlig unnötig)!



  • hab ich auch gar nicht behauptet das ein neuer string erzeugt werden muss. allerdings wird ein string verwendet und nen kumpel von mir hat die aufgabe mit 2 strings gelöst ,kann ich auch gleich reinstellen die lösung von ihm:



  • So, jetzt noch mal getestet:

    #include <stdio.h>
    
    int main()
    {
       char nr[] = "49927398716";
       int i;
       int sum = 0;
       int doppelt = 0;
       int zwi;
    
       for(i = strlen(nr); i; )
       {
         --i;
         zwi = nr[i] - '0';
    
         if(doppelt)
         {
           zwi = zwi * 2;
           if(zwi > 9)
           {
             sum += 1;
             zwi %= 10;
           }
         }
         sum += zwi;
         doppelt = !doppelt;
       }
    
       printf("sum = %d\n", sum);
    }
    


  • int main()
    {
    int flag, i, C, B, mod; // Deklaration der Variablen
    char A[] = "Kreditkartennummer eingeben bitte"; // String Deklariert
    char X[] = "00000000000000000000"; // String Deklariert
    do // Do-schleife eingang
    {
    printf("Kreditkartennummer eingeben bite\n"); // Text Ausgabe
    flag = 0; // Schalter initialisiert
    gets(A); // Eingabe der Kartennummer
    if (!(strlen(A) >= MIN && strlen(A) <= MAX)) // Länge der Kartennummer einschränken in if Anweisung
    flag = 1; // if Anweisung false=umwandlung durch negation in true schalter=1
    else
    for (i = 0; i < strlen(A); i++) //
    if (!(A[i] >= 48 && A[i] <= 57)) //es wird geprüft ob an jeder stelle des strings der Wert zwischen 0 und 9 liegt
    flag = 1; //

    } while (flag); // wenn flag=1 durchlaufen folgende schritte unterhalb der while-schleife
    X[20 - strlen(A)] = '\0'; // 0 Terminierung
    strcat(X, A); // Anhängen des strings A an string X (verkettung)
    C = 0; // Variable Initialisiert
    for (i = 19; i >= 0; i--){
    mod = i % 2; // jede stelle der kartennummer durch 2 und mit den restwerten wird gearbeitet
    if (mod == 0){ // es wird verglichen ob mod gleich null ist
    B = (X[i] - 48) * 2; // alle geraden Stellen werden verdoppelt
    if (B > 9){ //Wenn Zahl größer 9 dann wird 9 abgezogen
    B = B - 9;
    }
    else{ B = B; }
    }
    else
    {
    B = X[i] - 48; // string werte minus 48
    }C = C + B;
    } //Prefix Abfrage über Ascii Tabelle
    if (A[0] == 53 && A[1] == 49 || A[0] == 53 && A[1] == 50 || A[0] == 53 && A[1] == 51 || A[0] == 53 && A[1] == 52
    || A[0] == 53 && A[1] == 53 && strlen(A) == 16){
    printf("Mastercard\n\n");
    }
    if (A[0] == 52 && strlen(A) == 13 || A[0] == 52 && strlen(A) == 16) {
    printf("Visa\n\n");
    }
    if (A[0] == 51 && A[1] == 52 || A[0] == 51 && A[1] == 55 && strlen(A) == 15){
    printf("AMEX\n\n");
    }
    if (A[0] == 51 && A[1] == 48 && A[2] == 48 || A[0] == 51 && A[1] == 48 && A[2] == 49 || A[0] == 51 && A[1] == 48 && A[2] == 50 ||
    A[0] == 51 && A[1] == 48 && A[2] == 51 || A[0] == 51 && A[1] == 48 && A[2] == 52 || A[0] == 51 && A[1] == 48 && A[2] == 53 ||
    A[0] == 51 && A[1] == 54 || A[0] == 51 && A[1] == 56 && strlen(A) == 14){
    printf("Dinners Club/Carte Blanche\n\n");
    }
    if (A[0] == 54 && A[1] == 48 && A[2] == 49 && A[3] == 49 && strlen(A) == 16){
    printf("Discover\n\n");
    }
    if (A[0] == 50 && A[1] == 48 && A[2] == 49 && A[3] == 52 && strlen(A) == 15){ // calcular para any???
    printf("enRoute\n\n");
    }
    if (A[0] == 51 && strlen(A) == 16){
    printf("JCB\n\n");
    }
    if (A[0] == 50 && A[1] == 49 && A[2] == 51 && A[3] == 49 || A[0] == 49 && A[1] == 56 && A[2] == 48 && A[3] == 48 && strlen (A)==15){
    printf("JCB\n\n");
    }
    if (C % 10 == 0){ // Modulo 10
    printf("Die karte ist gueltig\n\n"); //Ausgabe
    }
    else {
    printf("Karte ist ungueltig\n\n");
    }
    system("PAUSE");
    }



  • kscherz schrieb:

    Belli hast du whatsapp oder so,da ich [...]

    Frag ma besser hier im Forum, da kriegst Du auch dann Hilfe, wenn ich grad keine Zeit habe 😉



  • Belli danke für die Unterstützung bis dahin ich muss jetzt erstmal los wird nachher nochmal mir das Problem genauer angucken.



  • 1.) Kennt C kein const?
    2.) Was stimmt mit der Quelle bei Wikipedia nicht?



  • C kennt const wieso ?



  • was mach ich falsch statt zahlen kommen komische zeichen raus ?

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

    int main() {
    int i,a;
    char karte[]="krdeitkate balabalabal";

    scanf("%s",karte);
    for(i=0;i<strlen(karte);i++){
    karte[i]=(karte[i]-48) * 2;
    }
    printf("%s",karte);
    }


  • Mod

    karte[i]=(karte[i]-48) * 2;
    

    Wieso sollten nach dieser Behandlung denn deiner Meinung nach noch Zahlen heraus kommen?



  • Wenn du Ziffern haben willst, musst du die '0' auch wieder addieren.

    karte[i]=(karte[i]-48) * 2 + '0'; 
                               ^^^^
    

    Nutze doch auch bitte die Code-Tags.
    Code markieren und auf den C-Button unter dem 😡 klicken.



  • na ich gebe sag ich mal 22222 ein das wäre 5050505050 als char und dann in der schleife 50-48 und mal 2 oder nicht ? ich glaube ich muss das noch erst in ein integer konvertieren wa nur wie ?



  • ahh ja macht sinn danke dirkb 🙂 YEs



  • Du machst ja immer noch den gleichen Scheiß 😕
    Gib mal statt 22222 34567 ein.
    Ich hab Dir doch schon ein fertiges Programm bis zur Bildung der Summe gepostet!?


Anmelden zum Antworten