Forum: PC-Programmierung C-Programm in Visual Studio 2010 ausführen


von Marcel S. (marcel_s)


Lesenswert?

Hallo,

ich bin von Eclips auf Visual Studio 2010 umgestiegen, weil Eclips immer 
wieder Probleme auf meinem Rechner verursacht hat.
Unter Eclips konnte ich das Programm direkt in der IDE ausführen. Bei 
Visual Studio wird es immer in einer DOS-Box ausgeführt. Kann mir jemand 
einen Tip geben wie ich das Programm auch direkt unter Visual Studio 
ausführen kann. Es währe auch toll wenn man es mit Parametern starten 
kann.
Bei Google hab ich leider nach über zwei Stunden suche nichts passendes 
gefunden.

Vielen Danke

Marcel

von Peter II (Gast)


Lesenswert?

Marcel S. schrieb:
> Bei
> Visual Studio wird es immer in einer DOS-Box ausgeführt. Kann mir jemand
> einen Tip geben wie ich das Programm auch direkt unter Visual Studio
> ausführen kann.
es wird doch unterm Visual Studio ausgeführt. Wenn es ein Konsolen 
Programm ist dann wird auch eine passende Konsole angezeigt. Verstehe 
das Problem nicht.

> Es währe auch toll wenn man es mit Parametern starten
> kann.
einfach bei Optionen die Parameter einstellen.

von Marcel S. (marcel_s)


Lesenswert?

Es sieht so aus als würde das Programm mit Hilfe von CMD ausgeführt.

Ich habe als Hausaufgabe ein Programm das einen Eingegebenen Text 
analysiert geschrieben. Soweit funktioniert es. Ich muss aber einen sehr 
langen Text den wir bekommen haben, damit analysieren, um zu überprüfen 
ob es geht. Ich habe die TXT Datei geöffnet den Inhalt kopiert und 
wollte den Text über Tastenkombination während ich das Programm ausführe 
einfügen. Das funktioniert aber leider nicht.

Dafür suche ich eine Lösung.

Ich hoffe ihr  könnt mir helfen.


hier mein Programm: bestrehend aus drei Dateien

****************** textanaly_m.c ****************************

// Programm zur Textanalyse 1. Praktikumsversuch
#include <stdio.h>
#include <stdlib.h>
#include "textanalys.h"


int main(int argc, char* argv[])
{
  // Variablen Definition und Initialisierung
  int c=0;
  int  zeilen = 0;
  int wl= 0;     // = buchstaben
  int zeichenProZeile=0;
  int cat;
  int oldState = PRE_WORD;
  int newState = PRE_WORD;
  int worte = 0;
  int wla[MAXLAENGE]={0};




  printf(" Bitte Text eingeben \n\n");



  // While Schleife, solange zeichen = !EOF
  do
  {
    // Lese nächstes Zeichen
    c=getchar();

    // Lese nächstes Zeichen
    //c=getchar();

    // Zeilenende ?
    if(c == '\n' || c == EOF)
      {
        // Zeichenkategorie ist WS
        cat=WS;
        // Zeilenzaehler erhohen
        zeilen++;
        // Zeichen pro Zeile auf Null setzen
        zeichenProZeile=0;                    //*********
      }
    else
      {
        // Ermittlung der Zeichenkategorie
        cat=getCat(c);
        zeichenProZeile++;      //*****************************
      }
    // Ermittlung des neuen Textzustands (in Abhängigkeit vom alten 
Textzustand und der Zeichenkategorie
    newState=getNewState(oldState, cat);

    // neuen Textzustand auswerten (in Abhängigkeit vom alten 
Textzustand, ggfls. Wortzähler und Wortlangenzaehler erhoehn)

    //Wortlängenzähler erhöhen
    if (oldState==PRE_WORD && newState==IN_WORD) wl=1;

    else if(oldState==IN_WORD && newState==IN_WORD) wl++;


    // Wortende feststellen und Wortzähler erhöhen
    else if (oldState==IN_WORD && (newState==PRE_WORD || NO_WORD))
      {
        worte++;
        if(wl>MAXLAENGE) wl=MAXLAENGE;
        wla[wl-1]++;

      }
    oldState=newState;    //*********************


  } while(c != EOF);    //****************************

  // Anzahl der Worte und Zeilen ausgeben
  printf("Anzahl der Worte = %i \n",worte);
  printf("Anzahl der Zeilen = %i \n", zeilen);

  // Ausgabe der Verteilung der Wortlänge
  outWL(wla,MAXLAENGE);

  system("PAUSE");
}

******************* tafunc.c **************************************

#include <stdio.h>
#include "textanalys.h"


// Ermittlung der Kategorie des Zeichens
int getCat(int c)
{
  int cat;

  // überprüft ob c Blank, TAB oder NewLine ist
  if(c==' ' || c =='\t' || c=='\n') cat = WS;

  // überprüft ob c Unterstrich, Klein- oder Großbuchstabe ist
  else if(c=='_' || (c>='A' && c<='Z') || (c>='a' && c<='z')) cat = BU;

  // überprüft ob c eine Ziffer ist
  else if(c>='0' && c<='9') cat=ZIFF;

  // c ist eines der verbleibenden ASCII-, Sonder und Steuerzeichen
  else cat=SONST;
  return cat;
}

// Ermittlung des neuen Textzustands
int getNewState(int old, int cat)
{
  int newState=old;

  switch(old)
  {
  case PRE_WORD:
    if(cat==BU) newState=IN_WORD;
    else if(cat==ZIFF || cat==SONST) newState=NO_WORD;
    break;
  case IN_WORD:
    if(cat==SONST) newState=NO_WORD;
    else if(cat==WS) newState=PRE_WORD;
    break;
  case NO_WORD:
    if(cat==WS)
    break;
  }
  return newState;
}

// Ausgabe der Wortlängenverteilung in der Standartausgabe. Die 
Wortlängenverteilung ist im Arraywla der Größe len abgelegt
void outWL(int wla[], int len) 
//***************************************
{
  int i,j;

  for(i=0; i<len; i=i+1)
  {
    printf(" %i.\t Anzahl Worte mit Laenge :\t %\t", i+1, wla[i]);

    for(j=0; j<wla[i] ;j++)
    {
      printf ("*");
    }
    printf ("\n");
  }
}



**************************** textanaly.h *********************


// Symbolische Konstanden für den Textzustand
#define PRE_WORD 0  // nächstes Zeichen kann Anfang eines Wortes sein 
(u. Ausgangszustand zu Programmbeginn)
#define IN_WORD 1  // innerhalb eines Wortes
#define NO_WORD  2  // innerhalb einer Zeichenfolge, die kein Wort ist - 
d.h. das folgende Zeichen kann nicht Beginn eines neuen Wortes sein

// Symbolische Konstanden für die Zeichenkategorie
#define WS 0  // Whitespace-Character (Blank, TAB ('\t') oder NL ('\n'))
#define BU 1  // Groß-, Kleinbuchstaben und Unterstrich
#define ZIFF 2  // Ziffern
#define SONST 3  // die verbleibenden ASCII-Zeichen - Sonder- und 
Steuerzeichen.
// Symbolische Konstanden für die Länge des Wortlängen Arrays
#define MAXLAENGE 18

// Deklaration der Funktionen
int getCat(int c);
int getNewState(int old, int cat);
void outWL(int wla[], int len);

von Karl H. (kbuchegg)


Lesenswert?

Marcel S. schrieb:
> Es sieht so aus als würde das Programm mit Hilfe von CMD ausgeführt.

Ist auch gut so.

> ob es geht. Ich habe die TXT Datei geöffnet den Inhalt kopiert und
> wollte den Text über Tastenkombination während ich das Programm ausführe
> einfügen. Das funktioniert aber leider nicht.
>
> Dafür suche ich eine Lösung.

Ganz einfach.

Schau dir mal das CMD-Fenster genau an. Es hat links oben ein Icon. Da 
kann man mit der rechten Maustaste draufdrücken, kriegt ein Kontextmenü. 
In diesem Konztextmenü gibt es ein 'Bearbeiten' und da drunter wieder 
ein einfügen.

Aber: es geht auch viel einfacher.
Da das ganze unter CMD läuft, kann man ganz einfach die Input 
Redirection benutzen. Der Command Interpreter kann dein Textfile dem 
Programm anstelle der Standard Eingabe unterjubeln, so dass zb ein 
getchar oder ein scanf dann eben nicht mehr von der Konsole liest, 
sondern von diesem File.

Dazu legst du das Textfile dort hin, wo auch deine Source liegen.
Dann öffnest die die Peojekt-Properties, gehst auf "Configuration 
Properties', dort wieder auf Debugging und trägst bei den 'Command 
Arguments' ein
< intput.txt

der < ist die Input Redirection und anstelle von input.txt gibst du 
natürlich deine Textdatei an. Dann brauchst du nicht lange mit 
Copy&Paste rumspielen, sondern in der Debug Sitzung kommt der Input für 
dein Programm von dieser Datei und nicht von der Tastatur.

von Marcel S. (marcel_s)


Lesenswert?

Danke für die schnelle Antwort.
Das mit CMD hat geklappt. Ich werde jetzt noch die andere lösung testen.

Vielen Dank

Marcel

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.