函数从文本文件中读取10行,直到进入下一个循环



我得到了一个任务,让一个函数从文本文件中读取并显示10行然后停止并等待您输入anykey,然后再读取10行直到结束。

这就是我所做的

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
    FILE * source;
    char sentence[80];
    source = fopen("source.txt", "r");

    while (fgets(sentence, 80, source) != NULL)
    {
        for (int i = 0; i < 9; i++){
            fgets(sentence, 80, source);
            printf("%s", sentence);
        }

        printf("nnn Press [Enter] key to continue.n");

        while (getch() != NULL)
        {

            break;
        }
    }puts("nnn .....DONE!!");
    fclose(source);
}

我的函数的问题是它重复最后一个句子多次因为for循环。

任何想法?

为什么不

int i = 0;
while (fgets(sentence, 80, source) != NULL) //Breaks when fgets fails to read
{
    i++;
    printf("%s", sentence);
    if(i == 10) //10 lines read and printed
    {
        printf("nnn Press [Enter] key to continue.n");
        i = 0;  //Reset counter
        getch(); //Wait for key press
    }
}

如果您想等待用户按输入,使用

int i = 0;
while (fgets(sentence, 80, source) != NULL) //Breaks when fgets fails to read
{
    i++;
    printf("%s", sentence);
    if(i == 10) //10 lines read and printed
    {
        printf("nnn Press [Enter] key to continue.n");
        i = 0;
        while(getch() != 13); //Keep looping until enter is pressed
    }
}


另一种避免重置i值的方法是:

int i = 0;
while (fgets(sentence, 80, source) != NULL) //Breaks when fgets fails to read
{
    i++;
    printf("%s", sentence);
    if(i % 10 == 0) // Same as `if(! (i % 10))` 
    {
        printf("nnn Press [Enter] key to continue.n");
        while(getch() != 13); //Keep looping until enter is pressed
    }
}

旁注:总是检查fopen的返回值,看看它是否成功。fopen失败返回NULL

我不知道这个getch函数,但是我通常在等待回车键时所做的只是如下:

while(getchar()!='n');

但是它有一个问题,如果你使用scanf作为scanf让最后一个输入在缓冲区中按下。

相关内容

  • 没有找到相关文章

最新更新