Wie man mit scanf durch Leerzeichen getrennte Zahlen liest

Lesezeit: 4 Minuten

Benutzer-Avatar
Jainendra

Ich möchte Zahlen (ganzzahliger Typ) lesen, die durch Leerzeichen getrennt sind scanf() Funktion. Folgendes habe ich gelesen:

  • C, Lesen mehrerer Zahlen aus einer einzelnen Eingabezeile (scanf?)
  • wie man scanf mit Leerzeichen liest

Es hilft mir nicht viel.

Wie kann ich Zahlen mit Leerzeichen als Trennzeichen lesen? Für zB habe ich folgende Nummern als Input 2 5 7 4 3 8 18 jetzt möchte ich diese in verschiedenen Variablen speichern. Bitte helfen Sie.

  • Verknüpfung . Wird das helfen?

    – NT_

    3. Mai 2012 um 6:09 Uhr

  • Das ist zum Lesen von Leerzeichen. Ich möchte Zahlen lesen, die durch Leerzeichen getrennt sind.

    – Jainendra

    3. Mai 2012 um 6:13 Uhr

  • Handelt es sich um eine Zeichenfolge mit dynamischer Länge oder um einen festen Satz von Zahlen?

    – NT_

    3. Mai 2012 um 8:01 Uhr

  • Es ist für feste Zahlen.

    – Jainendra

    3. Mai 2012 um 8:22 Uhr

  • Warum sich dann mit dem ganzen Wirrwarr-Code herumschlagen. Folgen Sie dieser Antwort. Das willst du dann. Es funktioniert nicht für Sie?.

    – NT_

    3. Mai 2012 um 8:44 Uhr


Benutzer-Avatar
Nandkumar Tekale

Ich denke, standardmäßig werden Werte von scanf mit Leerzeichen/Enter gelesen. Nun, Sie können Leerzeichen zwischen ‘%d’ einfügen, wenn Sie Ganzzahlen drucken. Dasselbe auch für andere Fälle.

scanf("%d %d %d", &var1, &var2, &var3);

Wenn Sie kommagetrennte Werte lesen möchten, verwenden Sie Folgendes:

scanf("%d,%d,%d", &var1, &var2, &var3);

  • scanf ignoriert bei den meisten Leerzeichen % Direktiven, daher möchten Sie im Allgemeinen keine Leerzeichen in Ihren Formatzeichenfolgen. Für den ersten Fall (durch Leerzeichen getrennte Ganzzahlen) möchten Sie also scanf("%d%d%d", &var, &var2, &var3); Die zusätzlichen Leerzeichen tun hier eigentlich nichts (sie haben keine Wirkung), aber in anderen Fällen möchten Sie sie nicht, es sei denn, Sie brauchen sie.

    – Chris Dodd

    7. Februar 2013 um 21:23 Uhr


  • Warum müssen Sie hier &var1 verwenden (ist var1 eine Variable vom Typ int?)? Ist das nicht nur ein ‘Label’ für die Speicheradresse von var1?

    – YoTengoUnLCD

    4. Oktober 2015 um 23:24 Uhr

  • @YoTengoUnLCD ja genau. Das scanf Die Funktion benötigt die Adresse, um den Wert an dieser Adresse zu überschreiben. Dies gilt für ints und jeder andere Typ, den Sie verwenden könnten scanf. Hier passiert nichts Magisches, wenn Sie eine Funktion haben, die einen Wert überschreiben muss, benötigt diese Funktion die Adresse, nicht den Wert selbst.

    – parker.sikand

    21. Juli 2016 um 16:48 Uhr

scanf verwendet ein beliebiges Leerzeichen als Trennzeichen, also wenn Sie es einfach sagen scanf("%d", &var) Es überspringt alle Leerzeichen und liest dann eine ganze Zahl (Ziffern bis zur nächsten Nicht-Ziffer) und nichts weiter.

Beachten Sie, dass Leerzeichen alle Leerzeichen sind – Leerzeichen, Tabulatoren, Zeilenumbrüche oder Wagenrückläufe. Alle davon sind Leerzeichen und eine oder mehrere von ihnen dienen dazu, aufeinanderfolgende Ganzzahlen zu begrenzen.

int main()
{
char string[200];
int g,a,i,G[20],A[20],met;

gets(string);
g=convert_input(G,string);

for(i=0;i<=g;i++)
    printf("\n%d>>%d",i,G[i]);
return 0;
}

int convert_input(int K[],char string[200])
{
int j=0,i=0,temp=0;
while(string[i]!='\0')
{
    temp=0;
    while(string[i]!=' ' && string[i]!='\0')
        temp=temp*10 + (string[i++]-'0') ;
    if(string[i]==' ')
        i++;
    K[j++]=temp;
}
return j-1;
}

  • Würde eine Art Beschreibung nicht helfen?

    – Brücke

    31. Mai 2012 um 8:06 Uhr

Es sollte so einfach sein wie die Verwendung einer Liste von Empfangsvariablen:

scanf("%i %i %i", &var1, &var2, &var3);

Mit dieser Lösung ist es möglich, positive und negative ganze Zahlen zu lesen:

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

#define BUFFER_SIZE 50


int convert_input (int * v, char * buffer) {
    int len = 0, i = 0, temp = 0, positive_or_negative_one = 1;
    while(buffer[i]!='\0') {
        temp = 0;

        if (buffer[i] == '-'){
            positive_or_negative_one = -1;
            i++;
        } else {
            while(buffer[i] != ' ' && buffer[i] != '\0')
                temp = temp*10 + (buffer[i++]-'0');

            if(buffer[i]==' ')
                i++;
            v[len++] = temp * positive_or_negative_one;
            positive_or_negative_one = 1;
        }
    }
    return len;
}

int main(int argc, char const *argv[]) {
    int *a = NULL;
    int count_a, len=0;
    char buffer[BUFFER_SIZE];

    printf("Input numbers here: ");
    gets(buffer);
    for (int i = 0; i < strlen(buffer); i++) {
        if (buffer[i] == ' '){
            len+=1;
        }
    }

    a = (int*) malloc(sizeof(int) * len + 1);
    count_a = convert_input(a, buffer);

    for (int i = 0; i < count_a; i++) {
        printf("%d\n", a[i]);
    }

    free(a);

    return 0;
}

Ein- und Ausgabebeispiel:

Input numbers here: 1 2 3 -4 10
1
2
3
-4
10

1382780cookie-checkWie man mit scanf durch Leerzeichen getrennte Zahlen liest

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy