1


我目前正在尝试从 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。

4

3 回答 3

5

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

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

fgets(s, SIZE, stdin);
sscanf(s, "%d", &T);
/* ... */
于 2013-08-19T20:57:20.753 回答
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;
    }
于 2013-08-19T20:57:09.757 回答
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 

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

于 2017-03-19T16:02:59.603 回答