c язык: сделать fgets, чтобы продолжать принимать ввод, пока я не нажму дважды? - PullRequest
4 голосов
/ 29 апреля 2010

Привет, я хотел бы спросить, как бы я изменил этот код для вопроса: (Он принимает только один ввод, затем распечатывает его. Я хочу, чтобы он продолжал работать, пока я не нажму дважды enter (\ n).

#include <stdio.h>

#define MAXLENGTH 1000
int main(void) {
    char string[MAXLENGTH];

    fgets(string, MAXLENGTH, stdin );
    printf("%s\n", string);

    return  0;
}

Я запутался в fgets (string, MAXLENGTH, stdin); строка, что означает / делает stdin?

РЕДАКТИРОВАТЬ: Крис, я пробовал ваш путь:

    #include <stdio.h>

#define MAXLENGTH 1000
int main(void) {
    char string[MAXLENGTH];


    do {
    if (!fgets(string, MAXLENGTH, stdin ))
        break;
    printf("%s", string);
    }
} while (string[0] != '\n');


    return  0;
}

Он печатается после того, как я нажму клавишу ввода, но сначала я хочу напечатать весь список, а затем разрешить ему распечатать список после того, как я дважды нажму клавишу ввода.

Ответы [ 3 ]

2 голосов
/ 29 апреля 2010

Попробуйте это:

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

#define MAXLENGTH 1000
int main(void) 
{
    char string[MAXLENGTH];

    int i = 0;
    for(;;++i)
    {
        string[i] = getchar();
        if (i > 0 && string[i] == '\n' && string[i-1] == '\n') break;                
    }

    string[i] = 0;

    printf("Print it again:\n%s",string);

    return  0;
}
2 голосов
/ 29 апреля 2010
do {
    if (!fgets(string, MAXLENGTH, stdin ))
        break;
    printf("%s", string);
} while (string[0] != '\n');

будет продолжать читать ввод и печатать его до тех пор, пока не увидит пустую строку (дважды нажать клавишу ввода) или до EOF.

stdin относится к стандартному вводу программы , который является источником входного сигнала, к которому он подключен при запуске.Если вы просто запускаете его в командной строке без дополнительных перенаправлений оболочки, это будет клавиатура.

1 голос
/ 29 апреля 2010

Если вы хотите, чтобы весь ввод печатался после двойного нажатия клавиши возврата, вы можете сделать:

char string[MAXLENGTH];     // to hold a single input line.
char strings[MAXLENGTH]=""; // to hold the entire input lines.
do {

    if (fgets(string, MAXLENGTH, stdin ) == NULL)
        break;
    strcat(strings,string);
} while (string[0] != '\n');
printf("%s", strings);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...