He buscado lo que se siente como todos los recursos hacia fuera allí y me parece que no puede encontrar una sólida respuesta a esta pregunta. Tal vez es obvio, aún soy nuevo en C++.

Tuve el siguiente funcional principal método:

int main()
{
    char firstChar, secondChar;
    cin >> firstChar;
    cin >> secondChar;
    cout << firstChar << " " << secondChar;

    system("pause"); //to wait for user input; allows the user to see what was printed before the window closes
    return 0;
}

Esto hará que la consola que esperar para la entrada. El usuario introduce algo. En este caso (test). La salida es:

( t

Me gustaría cambiar esto para que la señal de entrada proviene de un archivo y se puede ejecutar de la misma manera para cada línea en lugar de solo una.

He intentado muchas variaciones de los siguientes:

int main(int argc, char* argv[])
{
    ifstream filename(argv[0]);
    string line;
    char firstChar, secondChar;
    while (getline(filename, line))
    {
        cin >> firstChar;  //instead of getting a user input I want firstChar from the first line of the file.
        cin >> secondChar; //Same concept here.
        cout << firstChar << " " << secondChar;
    }

    system("pause"); //to wait for user input; allows the user to see what was printed before the window closes
    return 0;
}

Esto simplemente se ejecuta el bucle while una vez por cada línea en el archivo, pero todavía requiere la entrada en la consola, y en ninguna manera se manipula los datos en el archivo.

Contenido del archivo:

(test)
(fail)

Automático deseado de salida (sin hacer que el usuario introduzca (test) and (fail) manualmente:

( t
( f
  • He añadido una respuesta, pero a menos que usted nos muestran un ejemplo de un archivo de entrada sólo puedo imaginar cómo es el formato
InformationsquelleAutor leigero | 2014-03-05

3 Comentarios

  1. 3

    Última Edición

    Después de ver la entrada me gustaría hacer algo como esto

    int main(int argc, char* argv[])
    {
        ifstream exprFile(argv[1]); //argv[0] is the exe, not the file ;)
        string singleExpr;
        while (getline(exprFile, singleExpr)) //Gets a full line from the file
        {
            //do something with this string now
            if(singleExpr == "( test )")
            {
    
            }
            else if(singleExpr == "( fail )") etc....
        }
    
        return 0;
    }

    Usted sabe lo que el total de entrada es a partir del archivo de modo que usted puede probar toda la cadena, en vez de, carácter por carácter. A continuación, sólo actuar en consecuencia una vez que usted tiene esta cadena

    • Hay una expresión de cada línea, pero puede ser bastante complejo, así que no es tan simple como solo x + y. no se pueden anidar, así como etc. Anteriormente sólo se ocupen de este mediante la extracción de caracteres con cin >> charVariable y que tire del carácter del extremo izquierdo. Cuando se trata de una cadena, y no de entrada, todo cambia.
    • Por favor, edita tu pregunta para mostrar un ejemplo del archivo de diseño
    • el uso de cin >> charVariable causas de la consola para sentarse allí a la espera de la entrada del usuario. Quiero utilizar este mismo concepto con una cadena existente. Algo así como singleExpr >> charVariable pero que no funciona.
    • No, pero se puede iterar sobre la cadena, carácter por carácter. Por favor, pegue una copia de su archivo y voy a editar mi respuesta en consecuencia
    • Véase mi edición para iterar sobre una cadena, carácter por carácter. Suena como un comportamiento como este que te deseo
    • He actualizado mi pregunta.

  2. 0

    El operador de extracción de flujo, o ‘>>’ podría leer de un arroyo hasta que encuentra un espacio en blanco.
    En C++, cin y cout son los arroyos de tipo istream y ostream, respectivamente. En tu ejemplo, exprFile es un istream que cuando se abre el archivo, está conectado correctamente el archivo que mencionas. Para obtener un carácter a la vez de una secuencia, se puede hacer algo como lo siguiente,

    char paren;
    paren = cin.get(); //For the cin stream.
    paren = exprFile.get(); //for the exprStream stream, depending on your choice

    Para obtener más información, vaya a través de este

    • cppreference.com es el sitio preferido para la referenciación. El sitio que mencionas es bastante pobre
    • Con la edición de la pregunta contenido del archivo paren = filename.get(); imprime un signo de dólar. El contenido del archivo se (test)
    • A mí me funciona. Puedo conseguir (y no $
  3. 0

    Que usted puede hacer como este:

    int main(int argc, char* argv[])
    {
        ifstream filename(argv[0]);
        string line;
        char firstChar, secondChar;
        while (getline(filename, line))
        {
            istringstream strm(line);
            strm >> firstChar;
            strm >> secondChar;
            cout << firstChar << " " << secondChar;
        }
    
        system("pause"); //to wait for user input; allows the user to see what was printed before the window closes
        return 0;
    }

Dejar respuesta

Please enter your comment!
Please enter your name here