Avatar billede Slettet bruger
10. december 2005 - 08:47 Der er 14 kommentarer og
1 løsning

Fejl i koden

Hej eksperter!
Jeg er ved at lave et lille kommandosprog... 'Typist'.
(Jeg er lidt grøn...)
Men koden virker ikke?!

#include "stdafx.h"
#include <tchar.h>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <fstream>
#include <sys/stat.h>
#include <cstdio>
#include <direct.h>
#include <io.h>
using namespace std;

void command() {
    int i = 2;
    char cmnd[];
    char trgt[];
    cout << "Enter command:\n";
    getline(cin, cmnd);
    while (cmnd[i] != '\0')
    {
        trgt += cmnd[i];
        i ++;
    }
    if (cmnd[0] == "o" || cmnd[0] == "O" || cmnd[1] != " ") {
        cmnd = "\"" + trgt + "\"";
        cout << "\nOpening file: '" << trgt << "'...";
        system(cmnd.c_str());
        cout << "\n\n'" << trgt << "' opened.\nPress <ENTER> to close this window.";
        cin.get();
    }
}

int main() {
    cout << "Typist 1.1\nToke S. Krainert, interAction 2005";
    command();
}
Avatar billede jpk Nybegynder
10. december 2005 - 11:15 #1
Du skal angive en længde på dine arrays, fx:
char cmnd[50]; // plads til 49 karakterer + nulterminering

Du kan IKKE kopiere ved at gøre sådan:
trgt += cmnd[i];
men fx:
trgt[i] = cmnd[i];

(eller bruge strcpy)

Du kan også vælge at bruge string. Jeg kan se du har den inkluderet...
Avatar billede jpk Nybegynder
10. december 2005 - 12:18 #2
Er det noget som dette du vil?

void command() {
  char cmd[101];
  cout << "Enter command:" << endl;
  cin.getline(cmd, 100);

  if(cmd[0] == 'o' || cmd[0] == 'O') {
    string trgt(&cmd[2]);
    cout << "\nOpening file: '" << trgt << "'...";
    system(string("\"" + trgt + "\"").c_str());
    cout << "\n\n'" << trgt << "' opened.\nPress <ENTER> to close this window.";
    cin.get();
  }
}
Avatar billede Slettet bruger
10. december 2005 - 20:08 #3
Du kan IKKE kopiere ved at gøre sådan:
trgt += cmnd[i];
men fx:
trgt[i] = cmnd[i];

> Jeg vil ikke kopiere. Jeg mener:

trgt = trgt + cmnd[i];
Avatar billede jpk Nybegynder
10. december 2005 - 23:56 #4
Som jeg ser det, prøver du at kopiere indholdet af cmnd (fra og med karaktér 3) over i trgt?

Det er netop hvad understående linie gør (hvor trgt dog er en string, ikke et char array).
string trgt(&cmd[2]);

Har du prøvet mit eksempel?
Avatar billede Slettet bruger
11. december 2005 - 08:15 #5
Nu forklarer jeg det på daglidags dansk, for det er ikke det jeg vil...
Jeg vil faktisk noget lidt mere avanceret, derfor misforståelser;
vi leger at vi skriver 'o c:\file.exe'.
jeg vil have cmnd til at indeholde det første tegn man skriver. trgt skal indeholde teksten man skrev fra og med 3. tegn (lige efter mellemrummet) og til og med det sidste tegn.

Så nu ser det sådan ud:
cmnd = "o";
trgt = "c:\file.exe";

Så siger du, at man kan gøre nederstående? Nice...
system(string("\"" + trgt + "\"").c_str());

Resten giver lidt sig selv... Hvis
cmnd == "o" {
    system(string("\"" + trgt + "\"").c_str());
}
Altså:
system("c:\file.exe").c_str());

Det var en hurtig gennemgang; du viste måske godt, hvad jeg ville, men nu taler vi helt sikkert ikke forbi hinanden!

Nå... Ved du, hvorfor det ikke virker?
Avatar billede jpk Nybegynder
11. december 2005 - 10:24 #6
Jeg fatter ikke hvad problemet er så... Det er jo stort set det min kode gør!

Har du prøvet den command funktion jeg skrev tidligere?
Avatar billede Slettet bruger
11. december 2005 - 12:55 #7
Altså:

#include "stdafx.h"
#include <tchar.h>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <fstream>
#include <sys/stat.h>
#include <cstdio>
#include <direct.h>
#include <io.h>
using namespace std;

void command() {
    int i = 2;
    char cmnd[];
    char trgt[];
    cout << "Enter command:\n";
    getline(cin, cmnd);
    while (cmnd[i] != '\0')
    {
        trgt += cmnd[i];
        i ++;
    }
    if (cmnd[0] == "o" || cmnd[0] == "O" || cmnd[1] != " ") {
        cmnd = "\"" + trgt + "\"";
        cout << "\nOpening file: '" << trgt << "'...";
        system(\" + trgt .c_str() + \");
        cout << "\n\n'" << trgt << "' opened.\nPress <ENTER> to close this window.";
        cin.get();
    }
}

int main() {
    cout << "Typist 1.1\nToke S. Krainert, interAction 2005";
    command();
}

?
Du har også ret;
Hvis man ikke kan bruge +=, -=, *= og /= må jeg finde på noget andet...
Avatar billede Slettet bruger
11. december 2005 - 12:56 #8
HOV!
system(\" + trgt .c_str() + \");
Skulle være:
system(\" + trgt + .c_str() + \");
Avatar billede jpk Nybegynder
11. december 2005 - 13:05 #9
Nej, begge er noget vrøvl!

Har du prøvet min funktion? Ja eller nej?


void command() {
  char cmd[101];
  cout << "Enter command:" << endl;
  cin.getline(cmd, 100);

  if(cmd[0] == 'o' || cmd[0] == 'O') {
    string trgt(&cmd[2]);
    cout << "\nOpening file: '" << trgt << "'...";
    system(string("\"" + trgt + "\"").c_str());
    cout << "\n\n'" << trgt << "' opened.\nPress <ENTER> to close this window.";
    cin.get();
  }
}

int main() {
    cout << "Typist 1.1\nToke S. Krainert, interAction 2005";
    command();
    return 0;
}
Avatar billede Slettet bruger
11. december 2005 - 17:12 #10
Godt, så tager jeg bare og kopierer din! One sec...
Avatar billede Slettet bruger
11. december 2005 - 17:21 #11
Tjaa... Nu virker det; sådan da... Den siger at ens filsti ikke er en intern eller eksterne kommando, en batch-fil og så viddere... Ligesom DOS gør når den ikke genkender en kommando...
Avatar billede Slettet bruger
12. december 2005 - 18:07 #12
Ved du hvorfor...?
Avatar billede jpk Nybegynder
12. december 2005 - 22:27 #13
Virker fint hos mig, har du husket at skrive hele stien?
Fx:
o c:\text.txt
Avatar billede Slettet bruger
13. december 2005 - 14:16 #14
VIRKER NU!!
Bare smid et svar!
Avatar billede jpk Nybegynder
13. december 2005 - 14:17 #15
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester