Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以同时使用scanf和getchar来读取文件吗?_C_Scanf_Text Files_Stdin_Getchar - Fatal编程技术网

我可以同时使用scanf和getchar来读取文件吗?

我可以同时使用scanf和getchar来读取文件吗?,c,scanf,text-files,stdin,getchar,C,Scanf,Text Files,Stdin,Getchar,我正试图读取一个文本文件。文件中有三个部分。第一行总是初始化一块土地的大小,下面的行到“&”应用土地的特征,然后最后几行描述通过土地的运动 输入示例: 4x4 (0,0) (3,3) & (0,0)>(0,1)> (0,2)>(0,3) 到目前为止,我已根据需要存储4x4,但在此之后,我如何: 从第2行继续,以不同的方式处理这些行 在“&”结束该过程,并继续以不同方式处理最后一行 我的代码不起作用: /* process first line */ while (c

我正试图读取一个文本文件。文件中有三个部分。第一行总是初始化一块土地的大小,下面的行到“&”应用土地的特征,然后最后几行描述通过土地的运动

输入示例:

4x4
(0,0)
(3,3)
&
(0,0)>(0,1)>
(0,2)>(0,3)
到目前为止,我已根据需要存储4x4,但在此之后,我如何:

  • 从第2行继续,以不同的方式处理这些行
  • 在“&”结束该过程,并继续以不同方式处理最后一行
  • 我的代码不起作用:

    /* process first line */
    while (c != "\n") {
        scanf("%dx%d%c", &row, &col, &c);
        printf("The land is %d high and %d wide.%c", row, col, c);
    }
    
    /* process until '&' is found */
    while (c = getchar() != '&') {
        printf("c=%c\n", c);
    }
    
    /* process rest of file */
    while (c = getchar() != EOF) {
        /* do something else */
    }
    

    你有几个问题

    首先,字符常量用单引号表示,如下所示:

    while (c != '\n')
    
    其次,您可以使用
    %*c
    吃掉所有字符,而不是在格式字符串中使用
    x
    ,如下所示:

    scanf("%d%*c%d%c", &row, &col, &c);
    
    while ((c = getchar()) != '&')
    
    您还应该在此处添加额外的括号以正确检查不平等性,如下所示:

    scanf("%d%*c%d%c", &row, &col, &c);
    
    while ((c = getchar()) != '&')
    
    这里也一样:

    while ((c = getchar()) != EOF)
    

    你有几个问题

    首先,字符常量用单引号表示,如下所示:

    while (c != '\n')
    
    其次,您可以使用
    %*c
    吃掉所有字符,而不是在格式字符串中使用
    x
    ,如下所示:

    scanf("%d%*c%d%c", &row, &col, &c);
    
    while ((c = getchar()) != '&')
    
    您还应该在此处添加额外的括号以正确检查不平等性,如下所示:

    scanf("%d%*c%d%c", &row, &col, &c);
    
    while ((c = getchar()) != '&')
    
    这里也一样:

    while ((c = getchar()) != EOF)
    

    代码中唯一正确的部分(可能)是
    printf
    语句。每隔一行至少包含一个bug。更好的方法是使用
    fgets
    读取每一行,并使用
    sscanf
    解析该行。可以将
    scanf
    getchar
    混合使用,但不建议这样做,因为空格处理中存在一些怪癖。代码中唯一正确的部分(可能)是
    printf
    语句。每隔一行至少包含一个bug。更好的方法是使用
    fgets
    读取每一行,并使用
    sscanf
    解析该行。可以将
    scanf
    getchar
    混合使用,但不推荐使用,因为空格处理中存在一些怪癖。