鉴于以下情况:
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;
}
答案 0 :(得分:1)
通过您的问题 - 似乎您提供了测试用例。如果您知道可能无法获得错误的输入 - 您可以做简单的事情。
第一个输入是一个表示测试用例数量的数字 - 所以你可以在这里使用scanf
来获取输入(事实上你也可以使用fgets
读取它并使用{{ 1}} / atoi
)。获得后,使用strtol
读取每一行。
现在你如何检查它是运营商还是号码?您可以检查该行的内容。对于操作员来说,它可以像检查输入行的第一个字符一样简单。
您如何理解您正在获得不同的群体?可以观察到,在数组之间存在包含fgets
的空白行。因此,当你得到它时,你可以确定正在采取一组的输入。
像这样的方式,您可以了解您作为输入获得的列表。
转换那些作为字符串的数字可以使用\n
或atoi
完成(更好的选择是提供错误检查)。
了解何时输入结束可以通过检查strtol
的返回值来完成,当没有任何内容可读时,它将返回fgets
。