Хотя цикл повторяется, но не знаю почему - PullRequest
0 голосов
/ 06 декабря 2011

Я пишу программу, которая читает первые 20 строк текстового файла. Когда первые 20 строк прочитаны, пользователю предоставляется возможность продолжить чтение следующих 20 строк или выйти из программы. Однако, что происходит со мной, это то, что он печатает 20 строк, появляется приглашение пользователя, а затем он автоматически печатает следующие 20 строк, не дожидаясь ввода пользователя. После этого он напечатает приглашение пользователя, а затем дождется ввода. Я знаю, что это простая проблема, но я не вижу этого! Я немного изменил код в соответствии с ответами на мой вопрос:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
FILE *fp;
char fname[20];
char c, input;
int line;
line = 0;

    printf("Please enter the name of the file you wish to view\n");
    scanf("%s", fname);

    fp = fopen(fname, "r");

    if (fp == NULL)
    {
    printf("The file did not open correctly");
    exit(0);
    }

    else
    {
    printf("The file opened correctly\n");
    }

        while(c != EOF && input != 'q')
        {   
            c = getc(fp);
            printf("%c", c);

                if  (c == '\n')
                {
                line++;

                    while (line==20)
                    {
                    line = 0;
                    printf("Press return to view the next 20 lines or press q to quit:");
                    scanf("%c", &input);

                        if (input == 'q')
                        {               
                            return 0;
                        }

                        else if (input == '\n')
                        {
                            line++;
                        }
                    }
                }
        }
return 0;
}

Ответы [ 3 ]

5 голосов
/ 06 декабря 2011
line = line++;

Postincrement, ваша строка всегда 0. Используйте только:

line++;

Редактировать : Хорошо, так что это не проблема. Я запустил вашу программу, и проблема в том, что когда вы вводите имя файла в первый файл scanf, вы нажимаете ввод, чтобы программа его считывала. По какой-то причине этот ввод (или перевод строки) читается во втором scanf как ввод. Просто добавьте фиктивный сканф после первого, чтобы поглотить эту новую строку:

printf("Please enter the name of the file you wish to view\n");
scanf("%s", fname);
scanf("%c", &input); // dummy scanf
1 голос
/ 06 декабря 2011

Самое главное, научиться включать все предупреждения и отладочную информацию (в linux с gcc -Wall -g) и узнать, как использовать отладчик (например, gdb в Linux).

Вы действительно не можете научиться кодировать в C без обоих.

0 голосов
/ 06 декабря 2011

Вы должны использовать fgets stdin вместо scanf, вы можете указать количество символов, которые вам нужно прочитать, и это будет более безопасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...