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

时间:2013-08-19 20:52:34

标签: c


我目前正在尝试解决CodeChef中的问题,但我在循环中使用fgets()时遇到了麻烦。

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

所以,我试过这个:

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

#define SIZE 10

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

    scanf("%d", &T);

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

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

  

3
你好嗨嗨什么

我只能输入直到“Hi”然后程序退出成功(返回0)。

为什么会这样,我该如何解决?

提前谢谢你,
kpark。

3 个答案:

答案 0 :(得分:5)

fgets()会消耗第一次调用scanf()时留下的换行符。所以它消耗了3行,但第一行看起来像是你所拥有的fgets()循环的空行。

您可以使用fgets()来获取第一行,并使用sscanf()将字符串解析为数字来解决此问题。

fgets(s, SIZE, stdin);
sscanf(s, "%d", &T);
/* ... */

答案 1 :(得分: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;
    }

答案 2 :(得分:0)

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

//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])

2.声明一维指向字符的指针数组(注意命名约定),其中每个指针都指向一个字符串。

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

但需要了解: 对于指针数组,我们可以使用String初始化它们,但不能从命令行作为输入

char *set[2]={"Dinesh","Kandpal"}; //Its valid but you can't do this from command line 

为此我们做什么我们将动态创建一个空间,s 在一维指针数组中的一个元素中撕掉该地址,然后我们扫描的任何值将该内容复制到另一个字符串到我们使用malloc创建的位置