web-dev-qa-db-fra.com

Comment lire des nombres séparés par un espace à l'aide de scanf

Je veux lire des nombres (type entier) séparés par des espaces en utilisant la fonction scanf ().
J'ai lu ce qui suit

C, lecture de plusieurs nombres à partir d'une seule ligne d'entrée (scanf?)
comment lire scanf avec des espaces
Cela ne m'aide pas beaucoup. Comment lire des nombres avec un espace comme délimiteur. Par exemple J'ai les numéros suivants comme entrée 2 5 7 4 3 8 18 maintenant je veux les stocker dans différentes variables.
Aidez-moi.

26
Jainendra

Je pense que par défaut les valeurs lues par scanf avec espace/enter. Eh bien, vous pouvez fournir un espace entre '% d' si vous imprimez des entiers. Idem pour les autres cas.

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

De même, si vous souhaitez lire des valeurs séparées par des virgules, utilisez:

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

Lire comme %s[^\n]

puis lisez chaque char de la chaîne, et faites une atoi() s'il s'agit d'une char, sinon ignorez-la.

3
Satya

Cela devrait être aussi simple que d'utiliser une liste de variables de réception:

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

3
user694833
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;
}
2
niraj.nijju

scanf utilise n'importe quel espace blanc comme délimiteur, donc si vous dites simplement scanf("%d", &var) il sautera tout espace blanc puis lira un entier (chiffres jusqu'au prochain non-chiffre) et rien de plus.

Notez que les espaces sont des espaces - espaces, tabulations, retours à la ligne ou retours chariot. Chacun de ces espaces est un espace et l'un ou plusieurs d'entre eux serviront à délimiter des entiers successifs.

2
Chris Dodd