如何使用scanf读取空格分隔的数字

我想读取使用scanf()函数用空格分隔的数字(整数类型)。
我已阅读以下内容

C,从单输入线读取多个数字(scanf?)
如何用空格读取scanf
这对我没什么帮助。 如何读取带空格的数字作为分隔符。 例如,我有以下数字作为输入2 5 7 4 3 8 18现在我想将它们存储在不同的变量中。
请帮忙。

我认为默认值由scanf用space / 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 ,如果是char ,则执行atoi() ,否则忽略它。

 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)它将跳过任何空格然后读取一个整数(数字直到下一个非数字),仅此而已。

请注意,空格是任何空格 – 空格,制表符,换行符或回车符。 其中任何一个都是空格,其中任何一个或多个都用于划分连续的整数。

TurboC ++编译器中的C ++代码:

 #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无关紧要,你要做的就是输入请求只写第一个输入然后按空格键然后写第二个输入等等。一切都是均匀的如果你只是在%d之间放置空格,那么也不会改变。 因此,我认为最好的方法就是这个。