C ++ чтение в строках и символах - PullRequest
0 голосов
/ 13 октября 2018

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

63f7hj-9 22 пробела L Это правильно

Мой файл данных состоит из этой строки данных, и я должен выяснить, как читать ее частями.Я должен прочитать в 63 и сохранить его как целое число, и мне не нужен f7hj-9.Мне также нужно прочитать в 22 пространствах и сохранить его как строку, а L как символ.

Фраза «Это правильно» должна идти в консоль.

Итак, мой вопрос: как мне прочитать только 63 и отказаться от всего остального?Сохраните фразу «22 пробела» в виде строки.L как символ И фраза «Это правильно» как строка.

Я новичок в c ++, и я получил части этого проекта для работы, но я застрял на этой части.

Спасибо за помощь.

1 Ответ

0 голосов
/ 13 октября 2018

Чтение ввода из файла и разбиение строки

63f7hj-9                      L Is this correct
в целое число как 63, игнорируя 7hj-9, а затем читая 22 пробела в строке space1, а затем читая символ L как символ, а остальную часть строки «Is this правильная» внутри строки str2.Это пример того, как вы можете использовать fscanf (или scanf) для достижения этой цели.
  • % d будет читать целое число, так как оно является спецификатором формата для целого числа

  • Далее нам нужно игнорировать «f7hj-9» из файла, поэтому просто записать его в том виде, как он есть, сделает работу

  • Далеенам нужно прочитать 22 пробела, чтобы% 22c прочитал 22 символа независимо от того, является ли символ новой строкой или пробелом (здесь 22 пробела)

  • Далее нам нужно прочитать символ, чтобы% c сохранил егов char c
  • Теперь другой% * c будет игнорировать один пробел после того, как L
  • , используя% [^ \ n] s, будет читать остальную часть строки до новой строки

#include <stdio.h>
int main() {
  int n;
  char c;
  char space1[23];
  char str2[32];
  FILE *fp;
  fp = fopen("b.txt", "r");
  if(fp == NULL) {
    printf("Failed to open the file\n");
    return 1;
  }
  if(fscanf(fp, "%df7hj-9%22c%c%*c%[^\n]s", &n, space1, &c, str2) != 4) {
      printf("Read failure\n");
      return 1;
  }
  printf("Integer = %d\n", n);
  printf("Spaces = %sEnd\n", space1);
  printf("Character = %c\n", c);
  printf("String = %s", str2);
  return 0;
}

Входные данные:

63f7hj-9                      L Is this correct

Выход:

Integer = 63
Spaces =                       End
Character = L
String = Is this correct
...