C ++, проблемы с управлением файлом в c ++ - PullRequest
1 голос
/ 25 марта 2020

Я учусь кодировать на C ++ и пытаюсь открыть файл и позволить моему коду скопировать содержимое файла внутри строки или массива. (Не рассматривайте строки cin, это всего лишь тест, чтобы увидеть, входит ли код внутрь, и он делает это сейчас. Я сделал это, чтобы вручную вставить значения, показанные в файле, но я хочу, чтобы мой код делал это вручную, мне нужны указатели? Я не могу с ними справиться .. Кроме того, я пишу код на CLion, и его настройка настолько запутана, что некоторые люди говорят мне, что мне нужно поместить файл в папку c -make-build-debug, но если я это сделаю, файл не откроется напрямую. see here Это также относится к (int argc,char*argv[])? (строка, значение которой мне неясно)

   // #include <cstdio>  not needed
   // #include <cstring> not needed
    #include <fstream>
    #include <iostream>


    using namespace std;

    int main(int argc,char *argv[])
    {
     string riga;
     string row;
    char prodotto[26];
    int numero [100];
    float prezzo [6];
    float datoprezzo;
    int datonumero;
    char cliente[26];
    ifstream apri;
    ofstream chiudi;
    apri.open(argv[1]);
    if(!apri.is_open())
    {
      cerr << "File non aperto correttamente." << endl;
    }
    if(apri.is_open())
    {
     while(getline(apri,riga))
     {
       cout << riga << endl;
       cin >> prodotto;
       cin >> datonumero;
       cin >> datoprezzo;
       cin >> cliente;
       }

    }
    apri.close();

   }

1 Ответ

1 голос
/ 25 марта 2020

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

Проблема в том, что я ' мы пытались сделать это с помощью getline (apri, riga), а затем пытались скопировать содержимое riga в другую строку, но это не работает. Список покупок содержит слова и числа с плавающей запятой, поэтому я решил проанализировать каждую строку файла и поместить каждую часть в отдельную строку / массив, но я не знаю, как это сделать, поскольку файл не имеет указанных размеров - AvengerScarlet 28 минут go

Хорошо, так что давайте рассмотрим одну проблему за другой. Во-первых, как передать аргументы в код - это не обязательно, но это один из ваших вопросов:

Это также связано с (int arg c, char * argv [] )? (строка, значение которой мне неясно)

#include <fstream>
#include <iostream>
using namespace std;
int main (int argc, char *argv[])
{
   // argc should be 2 for correct execution, the program name
   // and the filename
   if ( argc != 2 )
   {
      // when printing out usage instructions, you can use
      // argv[ 0 ] as the file name
      cout << "usage: " << argv[ 0 ] << " <filename>" << endl;
   }
   else
   {
      // We assume argv[ 1 ] is a filename to open
      ifstream the_file( argv[ 1 ] );
      // Always check to see if file opening succeeded
      if ( ! the_file.is_open() )
      {
         cout << "Could not open file " << argv[ 1 ] << endl;
         return 1;
      }
         char x;
         // the_file.get( x ) reads the next character from the file
         // into x, and returns false if the end of the file is hit
         // or if an error occurs
         while ( the_file.get( x ) )
            {
               cout << x;
            }
   } // the_file is closed implicitly here by its destructor
   return 0;
}

Предположим, у вас есть реальный список покупок, такой как: shoppinglist.txt содержит:

Stacks of Toilet paper
Oil
Bunch of noodlesS
Hand sanitizer
...

Этот код полностью работоспособен, и вы можете выполнить его, например, с помощью C:/program.exe c:/shoppinglist.txt в зависимости от имени и местоположения, с которым вы его скомпилировали, адресует ваш вопрос об argv и чтении файла

PART 2

#

Может Я избегаю делать все это, если я просто пишу int main ()? Shure, выглядело бы так (отсюда) : мне нужны указатели? Я не могу их обработать ..

Нет, только если вы используете аргументы (* argv ...), так как это / должен быть указатель или указатель указателя

// basic file operations
#include <iostream>
#include <fstream>
using namespace std;

int main () {
  ofstream myfile;
  myfile.open ("example.txt");
  myfile << "Writing this to a file.\n";
  myfile.close();
  return 0;
}
[file example.txt]
Writing this to a file.

ЧАСТЬ 3 #

цель упражнения - получить информацию из файла и переписать ее в строку, которую можно сравнить с другими, сделанными из того же самого file.

Есть много решений, я сначала попытался бы go из того, что я снабдил char, чтобы преобразовать его в строку, как описано здесь. https://www.techiedelight.com/convert-char-to-string-cpp/

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

...