#include <stdio.h>
#include <stdlib.h>
int
main(void){
//Declare variables
//Want to read the first line and then ignore it. From the second line
//I scan in the input values and then store them in their individual arrays.
int yy, mm, dd, loc;
double mx, mm;
/*Read and discard the first line of the file*/
scanf("%*[^\n]");
/*Read from the second line*/
while(scanf("%d,%d,%d,%d,%lf,%lf\n",
&loc, &yy, &mm, &dd, &mx, &mn) == 6){
//Storing each input in its own array.
}
}
答案 0 :(得分:1)
scanf("%*[^\n]");
确实会读取并丢弃第一个换行符,但不会丢弃换行符本身。我建议将其与getchar();
配对。
\n
不会按照您的想法执行;因为scanf
不是面向行的(而是面向字段的),您可能会发现它将丢弃所有空格字符,而不仅仅是换行符。我不认为这是一个问题。如果你想逐字地丢弃该行的其余部分,你可以使用建议放弃第一行的相同代码:
scanf("%*[^\n]");
getchar();
您的代码中有两个mm
声明,但您没有提到错误消息,所以我猜您的测试用例不准确而且您想要其中一个( double
)代替mn
。
考虑到这些问题,正如my testcase(包含在下面)中所示,我希望您的程序能够读取并丢弃第一行,然后读取int
s的四个字段作为十进制数字后跟两个double
s字段作为十进制数字,以逗号分隔。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int yy, mm, dd, loc;
double mx, mn;
scanf("%*[^\n]");
getchar();
while (scanf("%d,%d,%d,%d,%lf,%lf\n", &loc, &yy, &mm, &dd, &mx, &mn) == 6){
printf("<%d> <%d> <%d> <%d> <%f> <%f>\n", loc, yy, mm, dd, mx, mn);
}
}
更新:根据您的一条评论的外观,这实际上并不符合您的作业要求。 “你应该使用单独的while(getchar())循环来消耗第一行”,因此scanf("%*[^\n]"); getchar();
应该用你的循环替换。
如果你最后在你的问题中添加了一个尝试,请随时ping我,这样我就可以提供反馈。