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()
。