C 读取循环中的多个用户输入字符串

C 读取循环中的多个用户输入字符串,c,C,我目前正试图从CodeChef解决一个问题,但在循环中使用fgets时遇到了问题 第一个输入T将是一个正整数,包含用户输入的数量。 然后由换行符分隔,用户将在任何情况下输入长度小于10的字符串 所以,我试过这个: 但是,当我尝试使用以下输入测试代码时: 你好嗨什么 我只能输入Hi,然后程序成功退出并返回0。 为什么会出现这种情况?我如何解决 提前谢谢大家,, kpark.它将T的读数作为计数的一部分进行计数。在scanf中添加新行 #include <stdio.h> #includ

我目前正试图从CodeChef解决一个问题,但在循环中使用fgets时遇到了问题

第一个输入T将是一个正整数,包含用户输入的数量。 然后由换行符分隔,用户将在任何情况下输入长度小于10的字符串

所以,我试过这个:

但是,当我尝试使用以下输入测试代码时:

你好嗨什么

我只能输入Hi,然后程序成功退出并返回0。 为什么会出现这种情况?我如何解决

提前谢谢大家,,
kpark.

它将T的读数作为计数的一部分进行计数。在scanf中添加新行

#include <stdio.h>
#include <stdlib.h>

#define SIZE 10



    int main()
    {
        int T;
        int diffX, diffY;
        char s[SIZE];

        scanf("%d\n", &T);

        while (T--){
            fgets(s, SIZE, stdin);
            printf("%s\n", s);
        }
        return 0;
    }

作为计数的一部分,它正在计算T的读数。在scanf中添加新行

#include <stdio.h>
#include <stdlib.h>

#define SIZE 10



    int main()
    {
        int T;
        int diffX, diffY;
        char s[SIZE];

        scanf("%d\n", &T);

        while (T--){
            fgets(s, SIZE, stdin);
            printf("%s\n", s);
        }
        return 0;
    }
fgets使用第一次调用scanf留下的换行符。因此,它消耗了3行代码,但第一行代码看起来像是fgets循环的空行

您可以通过使用fgets获得第一行来解决这个问题,并使用sscanf将字符串解析为一个数字

fgets使用第一次调用scanf留下的换行符。因此,它消耗了3行代码,但第一行代码看起来像是fgets循环的空行

您可以通过使用fgets获得第一行来解决这个问题,并使用sscanf将字符串解析为一个数字

您的问题是关于如何在C中读取多个字符串? 然后可以通过两种方式完成:- 1.通过声明二维字符数组

为此,我们将动态创建一个空间,将该地址存储在一维指针数组中的一个元素中,然后我们扫描的任何值都会将该内容复制到另一个字符串中,复制到我们使用malloc创建的位置。您的问题是如何在C中读取多个字符串? 然后可以通过两种方式完成:- 1.通过声明二维字符数组


为此,我们将动态创建一个空间,将该地址存储在一维指针数组中的一个元素中,然后我们扫描的任何值都会将该内容复制到另一个字符串中,复制到我们使用malloc创建的位置,scanf不会使用用户输入的数字。您需要首先使用此选项,并建议避免在FGET中同时使用scanf。顺便说一句:很好的例子,你的问题。它需要三个字符串。第一个由3后面的新行组成,因为scanf将新行留在后面。然后您将有Hello和Hi作为数字2和3。scanf不会使用用户输入的数字中的\n。您需要首先使用此选项,并建议避免在FGET中同时使用scanf。顺便说一句:很好的例子,你的问题。它需要三个字符串。第一个由3后面的新行组成,因为scanf将新行留在后面。然后是数字2和3的Hello和Hi。将换行符添加到scanf格式在这里可以正常工作,但如果用户正在键入,则会很糟糕,因为只有在数字后面输入其他非空白输入后,scanf才会返回。最好对所有输入使用FGET,并使用sscanf处理数字。这对我来说很有效,Jonathan的建议很有用。非常感谢。我同意乔纳森的观点。只是尽量少地修改代码。与后续调用相比,第一次调用FGET时的前导空格并不一致。如果要在单个'\n'中扫描,请使用%*[\n]。回想一下,scanf`格式中的“\n”与任何数字的空白都匹配。在这里,将换行符添加到scanf格式将正常工作,但如果用户正在键入,则会很糟糕,因为只有在数字之后输入其他非空白输入后,scanf才会返回。最好对所有输入使用FGET,并使用sscanf处理数字。这对我来说很有效,Jonathan的建议很有用。非常感谢。我同意乔纳森的观点。只是尽量少地修改代码。与后续调用相比,第一次调用FGET时的前导空格并不一致。如果要在单个'\n'中扫描,请使用%*[\n]。回想一下scanf`格式中的“\n”匹配任意数量的空白。这对我来说很有效,并学习了一个新函数。谢谢你:这对我来说很有效,并且学到了一个新的功能。谢谢您:
fgets(s, SIZE, stdin);
sscanf(s, "%d", &T);
/* ... */
//Let say we want 6 strings each of them having max 10 characters.
char set[6][10] ;
for(int i=0;i<6;i++)
scanf("%s",set[i])
int main(){

int i,numOfStrings;
char temp[30];

printf("Enter Number of strings in set ");
scanf("%d",&numOfStrings);

//Here We have defined array of pointer that will store each string sepratly.
//Arry of pointer to character.
char *setOfStrings[numOfStrings];

for(i=0;i<numOfStrings;i++)
{
    printf("Enter string ");
    scanf("%s",temp);
    setOfStrings[i]= (char*)malloc(sizeof(temp)); //allocted new memory and gave it to array of pointer
    strcpy(setOfStrings[i],temp);
}

for(i=0;i<numOfStrings;i++)
{
    printf("string = %s \n",setOfStrings[i]);
}
return 0;
}
char *set[2]={"Dinesh","Kandpal"}; //Its valid but you can't do this from command line