Можно ли получить доступ к определенной строке в файле - PullRequest
0 голосов
/ 21 декабря 2018

я выделил красный файл с именем names.txt, который содержит имя и фамилию, я распечатал имена, просто чтобы посмотреть, работает ли он

for (int counter = 0; counter < 10; counter ++) {
  fscanf(names, "%s %s\n", firstname, secondname);
  printf("%s%s\n", firstname, secondname);
}

я попытался получить доступ к определенной строке с именем {x]но это дает мне один символ в первомanme

возможно ли сейчас печатать, скажем, 7-е имя и второе имя красного файла names.txt

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Да, если вы просто хотите напечатать седьмое имя, поместите условие вокруг вашего printf:

if (counter == 6)
    printf("%s%s\n", firstname, secondname);

Теперь просто общие замечания по другим проблемам вашего подхода.Во-первых, вы не выполняете проверку границ для своих входных данных, что может привести к переполнению буфера.

Общая рекомендация для чтения строк из файла - использовать fgets.Это читает всю строку, если ваш буфер достаточно велик.Затем вы можете разбить эту строку на имена, используя strtok или просто найдя первый пробел с помощью strchr.

Другая проблема заключается в том, что вы не проверяете, успешен ли ввод.fscanf возвращает количество успешно прочитанных элементов.Если это не равно 2, вам, вероятно, следует отказаться от цикла.

Наконец, вы выполняете цикл ровно 10 раз, что делает несколько смелое предположение относительно содержимого файла.Возможно, вы хотите выйти из цикла после прочтения 7-й строки.Кто знает?Но либо делайте это, либо выполняйте цикл, пока чтение строки не завершится неудачей.

0 голосов
/ 21 декабря 2018
for (int counter = 0; counter < 10; counter ++) 
{
    fscanf(names, "%s %s\n", firstname, secondname);
    if(counter==6)
    printf("%s%s\n", firstname, secondname);
}

Этот код теперь будет печатать только 7-е имя и фамилию,

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