Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:如何使用scanf存储未知数量的输入,以便将输入的每个字存储在不同的变量中?_C - Fatal编程技术网

C:如何使用scanf存储未知数量的输入,以便将输入的每个字存储在不同的变量中?

C:如何使用scanf存储未知数量的输入,以便将输入的每个字存储在不同的变量中?,c,C,到目前为止,我已经: char r[4][10]; printf("Enter an option: \n"); scanf("%s %s %s %s %s", r[0],r[1],r[2], r[3], r[4]); printf("%s %s %s %s %s\n", r[0], r[1], r[2], r[3], r[4]); 只要给出5个输入,该功能就可以工作。现在,如果您输入少于5个输入并点击enter,程序将继续请求输入,直到它具有所有5个值,但如

到目前为止,我已经:

    char r[4][10];

    printf("Enter an option: \n");
    scanf("%s %s %s %s %s", r[0],r[1],r[2], r[3], r[4]);
    printf("%s %s %s %s %s\n", r[0], r[1], r[2], r[3], r[4]);

只要给出5个输入,该功能就可以工作。现在,如果您输入少于5个输入并点击enter,程序将继续请求输入,直到它具有所有5个值,但如果输入少于5个输入,我希望scanf停止,程序继续

你最好用
fgets()
读一行,然后用
sscanf()
解析它。如果一行中的单词不超过5个:

char r[5][10];
char line[4096];

printf("Enter an option: \n");
if (fgets(line, sizeof(line), stdin) != 0)
{
    int num = sscanf(line, "%9s %9s %9s %9s %9s", r[0],r[1],r[2], r[3], r[4]);
    for (int i = num; i < 5; i++)
        r[i][0] = '\0';
    printf("%s %s %s %s %s\n", r[0], r[1], r[2], r[3], r[4]);
}
charr[5][10];
字符行[4096];
printf(“输入选项:\n”);
如果(fgets(行,sizeof(行),stdin)!=0)
{
int num=sscanf(行,“%9s%9s%9s%9s%9s%9s”,r[0],r[1],r[2],r[3],r[4]);
for(int i=num;i<5;i++)
r[i][0]='\0';
printf(“%s%s%s%s%s\n”,r[0],r[1],r[2],r[3],r[4]);
}
请注意,您只有
r[4][10]
,但使用了下标4-错误移动


更好的处理方法是循环扫描行,一次读取一个单词,直到数组中没有更多的空间或行中没有更多的单词。不过,这有点棘手。

这就是循环的用途:一次读入一个值并递增一个计数器。使用gets获取行。在循环中,使用strtok(或strtok_s)拆分行,然后使用sscanf读取每个数字。查找这些函数的手册页或帮助。@cup:永远不要使用
get()
;假装它不存在@别开玩笑了。像瘟疫一样避免
get()