所以我在这里基本上做的是使用命令行参数打开一个文件,但一次只打开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;
}
答案 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行。