C简单输入问题

时间:2018-02-04 05:49:39

标签: c input

鉴于以下情况:

2
+

-1
3
5

-2
4
6

-

-10
0
1
2
3

0
2
4
6

输入包括第一行中的测试用例数m,后跟m个运算符组和两个按严格递增的顺序排序的整数列表。

我想将整数存储在两个列表中,但我有问题如何确定何时需要第二个列表。是否有任何方法可以使用“\ n”作为确定第二个列表使用的点。

int main()
{
int cases;
scanf("%d\n", &cases);
printf("%d\n", cases);

char temp[100];
while(fgets(temp, 100, stdin) != NULL){
    if(strcmp(temp, "+\n") == 0)
        printf("operator");
    if(strcmp(temp, "\n") == 0)
        printf("blank line");
}

return 0;
}

1 个答案:

答案 0 :(得分:1)

通过您的问题 - 似乎您提供了测试用例。如果您知道可能无法获得错误的输入 - 您可以做简单的事情。

第一个输入是一个表示测试用例数量的数字 - 所以你可以在这里使用scanf来获取输入(事实上你也可以使用fgets读取它并使用{{ 1}} / atoi)。获得后,使用strtol读取每一行。

现在你如何检查它是运营商还是号码?您可以检查该行的内容。对于操作员来说,它可以像检查输入行的第一个字符一样简单。

您如何理解您正在获得不同的群体?可以观察到,在数组之间存在包含fgets的空白行。因此,当你得到它时,你可以确定正在采取一组的输入。 像这样的方式,您可以了解您作为输入获得的列表。

转换那些作为字符串的数字可以使用\natoi完成(更好的选择是提供错误检查)。

了解何时输入结束可以通过检查strtol的返回值来完成,当没有任何内容可读时,它将返回fgets