31

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

它对我没有多大帮助。

如何读取以空格为分隔符的数字。例如,我现在有以下数字作为输入2 5 7 4 3 8 18,我想将它们存储在不同的变量中。请帮忙。

4

5 回答 5

40

我认为默认情况下 scanf 使用空格/输入读取的值。如果你打印整数,你可以在 '%d' 之间提供空格。其他情况也一样。

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

同样,如果您想读取逗号分隔值,请使用:

scanf("%d,%d,%d", &var1, &var2, &var3);
于 2012-05-03T06:13:34.780 回答
6

scanf使用任何空格作为分隔符,所以如果你只是说它scanf("%d", &var)会跳过任何空格然后读取一个整数(直到下一个非数字的数字),仅此而已。

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

于 2013-02-07T21:20:28.550 回答
3
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;
}
于 2012-05-31T02:14:33.767 回答
2

它应该像使用接收变量列表一样简单:

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

于 2012-05-03T06:07:47.260 回答
0

使用此解决方案,可以读取正整数和负整数:

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

输入输出示例:

Input numbers here: 1 2 3 -4 10
1
2
3
-4
10
于 2021-12-16T11:05:16.313 回答