更改文本文件读取程序的逻辑以在4行后暂停输出

时间:2017-07-12 04:02:50

标签: c

所以我在这里基本上做的是使用命令行参数打开一个文件,但一次只打开4行,然后提示打印出add'l行。我可以将文件打印出来,但我无法弄清楚如何让它一次打印几行。这就是我在......的想法?

#include <stdio.h>

int main(int argc, char *argv[])
{

char line[1000];
FILE *pt;

  pt = fopen(argv[1], "r");
  if(pt ==  NULL) return -1;
  printf(argv[1], line);
  while(fgets(line, 1000, pt) != NULL)
    printf("%s", line);
  fclose(pt);
  return 0;
}

1 个答案:

答案 0 :(得分:1)

我从你的代码的奇怪行开始,然后我会尝试回答这个问题。

声明

 printf(argv[1], line);

让我很好奇 - 实际上你要打印什么?

此处line未初始化,argv[1]很难用作格式行。

所以我想它应该只是

 printf(argv[1]);

 printf("Filename is %s\n", argv[1]);

至于从名称为argv[1]的文件中读取您的代码看起来能够正常工作,我的意思是您的代码逐行读取直到文件末尾并在屏幕上打印这些行。

如果您想更改此逻辑,例如只读第4行,用计数器添加条件,例如:

int cnt;
for (cnt = 0; cnt < 4; cnt++) // repeat reading 4 times
{
    if (fgets(line, 1000, pt) != NULL)
        printf("%s", line);
    else
        break; // stop when reading fails
}

或(我更喜欢这个版本)

int cnt = 0;
while (fgets(line, 1000, pt) != NULL && cnt < 4)
{
    printf("%s", line);
    cnt++;
}

此类更改允许停止阅读(以及输出),因此在控制台屏幕上只显示4行或更少行。

最后,如果您希望按4组(或其他常量值)显示文件,请考虑以下代码段:

#include <stdio.h>

#define MAX_LINES_TO_PRINT 4

int main(int argc, char *argv[])
{

    char line[1000];
    FILE *pt;

    pt = fopen(argv[1], "r");
    if (pt == NULL) return -1;
    printf("Filename is %s\n", argv[1]);
    int cnt = 0;
    while (fgets(line, 1000, pt) != NULL)
    {
        printf("%s", line);
        cnt++;
        if (cnt % MAX_LINES_TO_PRINT == 0)
        {
            int answer;
            printf("[%d lines printed] Continue? (Y/N) : ", cnt);
            answer = getchar(); // get user's response
            while (getchar() != '\n'); // clean input buffer after getchar
            if (toupper(answer) == 'N')
            {
                break; // stop reading the file
            }
        }
    }
    fclose(pt);
    return 0;
}

使用您的文件尝试此程序,并询问是否有不明确的问题。

更改行#define MAX_LINES_TO_PRINT 4中的值,您可以调整一次打印的最大行数(在下一个请求继续之前),例如#define MAX_LINES_TO_PRINT 15使您的程序最多打印15行。