Comment lire des nombres séparés par des espaces en utilisant 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 numéros d’une seule ligne (scanf?)
comment lire scanf avec des espaces
Cela ne m’aide pas beaucoup. Comment puis-je lire des nombres avec un espace comme séparateur? Par exemple, j’ai les numéros suivants en entrée 2 5 7 4 3 8 18 Je souhaite maintenant les stocker dans différentes variables.
S’il vous plaît aider.

Je pense que par défaut, les valeurs lues par scanf avec espace / entrée. Eh bien, vous pouvez fournir un espace entre ‘% d’ si vous imprimez des entiers. Même chose pour les autres cas.

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

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

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

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

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

Lire comme %s[^\n]

puis lisez chaque caractère de la chaîne et faites atoi() s’il s’agit d’un caractère, sinon ignorez-le.

 int main() { char ssortingng[200]; int g,a,i,G[20],A[20],met; gets(ssortingng); g=convert_input(G,ssortingng); for(i=0;i<=g;i++) printf("\n%d>>%d",i,G[i]); return 0; } int convert_input(int K[],char ssortingng[200]) { int j=0,i=0,temp=0; while(ssortingng[i]!='\0') { temp=0; while(ssortingng[i]!=' ' && ssortingng[i]!='\0') temp=temp*10 + (ssortingng[i++]-'0') ; if(ssortingng[i]==' ') i++; K[j++]=temp; } return j-1; } 

scanf utilise n’importe quel espace blanc comme délimiteur. Par conséquent, si vous dites simplement scanf("%d", &var) il ignorera 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, nouvelles lignes ou retours à la ligne. N’importe lequel de ces espaces est un espace et un ou plusieurs d’entre eux serviront à délimiter des entiers successifs.

Code C ++ dans le compilateur TurboC ++:

 #include #include #include #include void main() { int l=0,i=0; char *a,*t; clrscr(); int n; cout<<"\nEnter a string: "; cin>>t; a=strdup(t); //duplicate while(strlen(a)){ a = strtok(a, ","); //gives ssortingng upto where ',' is found n=atoi(a); l+=strlen(a); //we save the length cout<<"n= "< 

La sortie ressemble à:

 int main(){ int A[1000]; char *tok = NULL; char *savePtr = NULL; char str[1000] = ""; int totalElement=0; printf("Enter space seperated ssortingng\n"); scanf("%[^\n]s", str); savePtr = str; while((tok=strtok_r(savePtr, " ", &savePtr))){ A[totalElement++] = atoi(tok); } for(int i = 0; i < totalElement; i++) printf("%d ", A[i]); } 

Ici, je viens d’écrire un simple code c pour append deux nombres et prendre les commentaires de l’utilisateur. maintenant a et b sont des entrées et% d% ou% d% d n’a pas d’importance, ce que vous avez à faire dès que l’entrée demandera d’écrire la première entrée, puis d’appuyer sur la barre d’espacement, puis d’écrire la deuxième entrée, etc. si vous mettez juste un espace entre% ds, alors aucun changement ne sera changé. Par conséquent, je pense que la meilleure façon est la suivante.