C программирование - печать 3-й строки текста - PullRequest
1 голос
/ 24 апреля 2010

Представьте, что у меня есть на TXT это:

Hello

SLB

3

1324

как я могу получить 3-ю строку? fgets или fscanf?

и представьте в тексте это:

8; 9; 10; 12

как мне распечатать разделенные числа?

Ответы [ 4 ]

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

Для вашего первого вопроса вы можете использовать fgets для чтения в одну строку. Чтобы получить третью линию, все, что вам нужно сделать, это позвонить fgets три раза. Простое игнорирование данных, которые он дает вам в первые два раза, фактически заставит вас пропустить первые две строки.

Что касается второго вопроса, вы, вероятно, захотите посмотреть, используя strchr, чтобы найти точки с запятой в строке. Это даст вам указатель на точку с запятой, а увеличение этого указателя на 1 даст вам указатель на следующий номер в списке. Просто повторяйте эту процедуру до тех пор, пока strchr не вернет NULL для просмотра списка.

Изменить: По запросу, здесь есть несколько ссылок на документацию для fgets и strchr на испанском языке. Страницы также доступны на нескольких других языках, используйте ссылки в верхнем левом углу, чтобы переключать переводы.

0 голосов
/ 24 апреля 2010

Еще одна попытка во второй части вопроса: разделить строку на несколько строк, вы можете использовать strchr, чтобы пройти по ней, как указано в bta, и в каждом разделителе вставить символ конца строки ('\ 0') и разбить строку на месте, используя указатели для ссылки на начало каждого сегмента.

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

int main(void) {
    /* may be read from input, initialized with value for simplicity */
    char a[] = "8;9;10;12";

    char *b, *c, *d;
    /*use strchr to get the index of ';' and replace it with and end of string 
      increment b to move it to the start of the  next string */
    b = strchr(a, ';');
    *b = '\0';
    b++;

    c = strchr(b, ';');
    *c = '\0';
    c++;

    d = strchr(c, ';');
    *d = '\0';
    d++;

    printf("a: %s, b: %s, c: %s, d:%s", a, b, c, d);

}

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

Если вы хотите быстро и грязно напечатать 3-ю строку текста ввода, вы можете просто использовать 3 оператора fgets.

#include <stdio.h>

int main(void) {
    char buf[256];

    fgets(buf, 256, stdin);
    fgets(buf, 256, stdin);
    fgets(buf, 256, stdin);

    printf("%s", buf);
}
0 голосов
/ 24 апреля 2010

для вашего второго вопроса, предположим, что TXT файл: .txt:

  #include <stdio.h>

static void output(char *p)
{
    while (*p != ';') {
        if (*p == '\0') {
            break;
        }
            putchar(*p);
            p++;

        }
    putchar('\n');
}

int main(void)
{
    char buf[20];
    char *p;
    int cnt = 0;
    FILE *fp;

    p = buf;

    fp = fopen("a.txt", "r");
    if (!fp) {
        return -1;
    }

    fgets(buf, 20, fp);

    output(p);

    while (1) {
        if (*p == ';') {
                p++;
                output(p);

        }
        if (*p == '\0') {
            break;
        }
        p++;
    }

    return 0;
};
0 голосов
/ 24 апреля 2010

С первого взгляда я бы тоже не использовал, вместо этого я бы использовал strtok.

Для первой проблемы я бы разбил входной текст на «токены», используя символ новой строки '\n'. Для решения второй проблемы вы можете использовать ; для разграничения ваших токенов.

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