Как читать только первые n символов из каждой строки на c языке? - PullRequest
0 голосов
/ 21 января 2020

Предположим, у меня есть файл со следующим содержимым

abcdefghijkl
mnopqrstuvwx
yz1234567890

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

abcde
mnopq
yz123

Я пробовал следующее решение,

char line[5];
    for (int i = 0; i < 5; i++){
        char c = getchar();
        line[i] = c;
        printf("%c", line[i]);
    }

, но оно не работает. Как я могу решить это?

Ответы [ 4 ]

3 голосов
/ 21 января 2020

Вот демонстрационная программа. Для простоты вместо внешнего файла используется стандартный поток ввода stdin.

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

int main(void) 
{
    char line[6];

    while ( fgets( line, sizeof( line ), stdin ) != NULL )
    {
        char *p = strchr( line, '\n' );

        if ( !p ) fscanf( stdin, "%*[^\n]\n" );
        else *p = '\0';

        puts( line );
    }

    return 0;
}

. Если ввести

abcdefghijkl 
xyz
mnopqrstuvwx
yz1234567890

, тогда вывод будет

abcde
xyz
mnopq
yz123
1 голос
/ 21 января 2020

Код, который вы разместили, будет читать 5 байтов из стандартного ввода и печатать их. Этот код должен работать.

Проблема с вашим кодом, вероятно, заключается в том, что вы не отбрасываете оставшиеся символы в строке перед чтением следующей строки с тем же l oop. Поскольку вы не опубликовали код, который вызывает l oop, у меня нет возможности узнать.

0 голосов
/ 21 января 2020

Полагаю, вы хотите, чтобы мы сделали это для вас, поскольку вы дали нам неполный код, поэтому вот оно:

char line[5];
for(int i = 0; i < 5; i++)
{
    char c = getchar();
    line[i] = c;
    printf("%c", line[i]);
}
while(getchar() != '\n'); //ignoring remaining characters until next line
0 голосов
/ 21 января 2020

Простая функция https://godbolt.org/z/2UP4JW


#include <stdio.h>
#include <stdint.h>

char *read5chars(char *buff, FILE *fp)
{
    int ch;
    char *ret;

    ret = fgets(buff, 6, fp);
    do
    {
        ch = fgetc(fp);
    }while(ch != '\n' && ch != EOF);

    return ret;
}

int main()
{
    char line[6];

    while(read5chars(line, stdin))
        printf("%s\n", line);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...