2013-08-23 2 views
-1

У меня есть приложение, написанное на C++, которое получает некоторые параметры из файла extern txt. Этот файл имеет одну переменную в каждой строке, и они разные виды, как:Чтение из файла различных типов переменных (1 в строке)

0,8
C: \ Documents \ TextFile.txt

Я пытался что-то вроде этого (не так, как у меня нет кода сейчас)

FILE* f; 
char line[300]; 
f = fopen("parameters.txt", "r"); 

    scanf(line, val1); 
    scanf(line, val2); 
    scanf(line, val3); 
    fclose(f); 

Но это не работает, а также попытался с fgets и fgetc с некоторыми с и не работает. Любая помощь или идея? Переменные всегда одинакового числа и имеют одинаковые типы в каждом месте (поэтому я думаю, что мне не нужно ни время, ни цикл). Большое вам спасибо за помощь в этой проблеме новичков, которая сводит меня с ума.

EDIT: На самом деле это был точный код, который я видел в другом решении здесь

sscanf(line, "%99[^\n]", tp); 
sscanf(line, "%99[^\n]", mcl); 
sscanf(line, "%99[^\n]", pmt); 
sscanf(line, "%99[^\n]", amx); 

Это не сработало, это скомпилированный но программа разбился, поэтому я изменил его в зсапЕ и Ждут» t, но переменные были пустыми.

+1

Первый аргумент 'scanf' должен быть строкой формата. – Barmar

+2

Pleae показывает ваш фактический код. Код, который вы опубликовали, настолько далек от права, что его сложно комментировать. Вам не хватает строки формата, вы называете 'scanf' вместо' fscanf' (поэтому он не читает из файла), и вы не показывали объявления 'valN'. – Barmar

+1

Вопрос помечен как C++, но ваш код использует стандартную библиотеку C для ввода-вывода? –

ответ

0

Поскольку вы используете C++ (а не только C), я предлагаю вам использовать стандартную библиотеку iostreams вместо C stdio. В частности, std :: ifstream хорошо читает отформатированные данные из файла.

#include <fstream> 
#include <string> 

// ... 

std::ifstream f("parameters.txt"); 

int val1; 
f >> val1; 

double val2; 
f >> val2; 

std::string val3; 
std::getline(f, val3); 

// etc 

В зависимости от вашего приложения могут потребоваться проверки ошибок. См. http://www.cplusplus.com/reference/iolibrary/ для деталей iostream.

+0

Кажется, что это работает, но ничего не пишет о какой-либо переменной (видимой при выполнении) – user2660557

+0

Является ли параметр.txt в текущем рабочем каталоге? После открытия файла с помощью конструктора ifstream проверьте результат f.fail(). Если он возвращает true, файл не может быть открыт по какой-либо причине (вероятно, потому, что его не удалось найти). –

0

scanf для считывания ввода от stdin, это не имеет никакого отношения к FILE.

Если вы хотите прочитать текстовый файл по строкам, я бы не рекомендовал FILE. Это сложнее и более подходит для двоичного чтения. Я бы с ifstream вместо этого, здесь есть очень простой пример:

#include <iostream> 
#include <fstream> 

using namespace std; 

int main(void) { 
    ifstream stream("parameters.txt"); 
    string line; 

    /* While there is still a line. */ 
    while(getline(stream, line)) { 
     // variable 'line' is now filled with everyone on the current line, 
     // do with it whatever you want. 
    } 

    stream.close(); 
} 
+0

Я пробовал, но ничего не получает из файла. Я пытаюсь распечатать строку, чтобы увидеть, что она получила, и она была пустой. Также, если я попытаюсь заполнить переменную тем, что находится в строке, ничего нет. – user2660557

+0

Вы уверены, что файл был открыт? У вас есть правильный путь? Обратите внимание, что 'line' является классом' std :: string', а не 'char *', поэтому он немного отличается в своем использовании. – Lochemage

+0

Спасибо, это сработало, это была проблема, связанная с этим (std :: string - char *) – user2660557

Смежные вопросы