Как читать числа, разделенные пробелом с помощью scanf

Я хочу читать числа (целочисленный тип), разделенные пробелами, используя функцию scanf ().
Я прочитал следующее

C, чтение нескольких номеров из одной строки ввода (scanf?)
как читать scanf с пробелами
Мне это не очень помогает. Как читать числа с пробелом в качестве разделителя. Например, у меня есть следующие числа в качестве ввода 2 5 7 4 3 8 18 Теперь я хочу сохранить их в разных переменных.
Пожалуйста помоги.

Я думаю, что значения по умолчанию, прочитанные scanf с пробелом / enter. Ну, вы можете предоставить пространство между «% d», если вы печатаете целые числа. То же самое и для других случаев.

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

Аналогично, если вы хотите читать значения, разделенные запятыми, используйте:

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

Это должно быть так же просто, как использовать список принимающих переменных:

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

Читайте как %s[^\n]

а затем прочитать каждый char строки и сделать atoi() если это char , иначе игнорировать его.

 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; } в 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; } 

scanf использует любые пробелы в качестве разделителя, поэтому, если вы просто скажете scanf("%d", &var) он пропустит любые пробелы, а затем прочитает целое число (цифры до следующей не-цифры) и ничего больше.

Обратите внимание: пробелы – это пробелы – пробелы, табуляции, новые строки или возврат каретки. Любой из них является пробелом, и любой из них или несколько из них будут служить для разграничения последовательных целых чисел.

Код C ++ в компиляторе 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 string upto where ',' is found n=atoi(a); l+=strlen(a); //we save the length cout<<"n= "< в #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 string upto where ',' is found n=atoi(a); l+=strlen(a); //we save the length cout<<"n= "< 

Результат выглядит так:

 int main(){ int A[1000]; char *tok = NULL; char *savePtr = NULL; char str[1000] = ""; int totalElement=0; printf("Enter space seperated string\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]); } 

Здесь я просто написал простой код c для добавления двух чисел и ввода ввода от пользователя. теперь a и b являются входами, а% d% или% d% d не имеет значения, что вы должны сделать, как только вход запросит только записать первый вход, затем нажмите пробел, затем напишите 2-й вход и так далее. если вы просто поместите пробел между% d’s, то и изменения не будут изменены. следовательно, я считаю, что лучший способ – это все.