Получение нескольких входных данных из одной строки файла на c

#c #string #file-io

#c #строка #файл-ввод-вывод

Вопрос:

В принципе, я пытаюсь получить три вещи из одной строки кода, прочитанной из файла .txt. Это будет повторено, но пока мне нужно знать только, как получить одну строку. Строка, которую я читаю, выглядит так:

 Biology $11 12  

Поэтому я хочу получить строку и два ввода и полностью игнорировать $ (обратите внимание, я не могу изменить файл .txt, поэтому я должен оставить $ in).

Так что, если у меня есть

 string subject; int biologyscores[25];  

Код, который у меня есть, таков :

 int biologyscores[25]; //array to store the integer values std::string subject; //string to store the subject the scores are for std::ifstream infile("myScores.txt"); //declare infile to read from "myScores.txt"  infile gt;gt; subject gt;gt; biologyscores[0] gt;gt; biologyscores [1]; //read into string and int array  

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

Проблема в том, что после выполнения этого кода тема = «Биология», что желательно, но у биологических хранилищ с индексом 0 и 1, похоже, есть ненужные номера, а не то, что я хочу в них прочитать.

Комментарии:

1. В зависимости от формата вашего файла может потребоваться прочитать целую строку в строку std::и проанализировать строку. Также будьте осторожны при чтении строки, в nfile gt;gt; subject которой все ваши предметы содержат ровно 1 слово, и у вас нет шансов, что в них будет пробел?

2. @drescherjm некоторые темы состоят из нескольких слов

3. Мое предложение состоит в том, чтобы вы начали с чтения всей строки в строку. Затем попытайтесь проанализировать строку. Обычно это проще (и гораздо менее подвержено ошибкам).

4. Я решил эту проблему, спасибо всем за вклад!

Ответ №1:

Вы можете использовать фиктивную символьную переменную, которая «подхватит» символ $ :

 char dummy_char; infile gt;gt; subject gt;gt; dummy_char gt;gt; biologyscores[0] gt;gt; biologyscores [1]; //read into string and int array  

Комментарии:

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

2. Если $ всегда присутствует, вы можете использовать его в качестве окончания темы, будь то одно слово или несколько.

Ответ №2:

Вы можете использовать seekg и tellg

 std::fstream infile("myScores.txt"); //declare infile to read from "myScores.txt" int temp; infile gt;gt; subject; //read into string  temp=infile.tellg(); //to get the position of $ infile.seekg(temp 1);// to move one step forward  infilegt;gt; biologyscores[0] gt;gt; biologyscores [1];//now you can read the int values