mikrocontroller.net

Forum: PC-Programmierung öffnen von Office Anwendungen über C-Programm


Autor: Richi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich bin Schüler (12) und möchte C kennenlernen und habe mir eine 
kleine Aufgabe herausgesucht. Es geht um das separate öffnen der Office 
Anwendungen Word, Excel und Powerpoint über ein C-Programm.

Problem: möchte ich ein bestimmtes Programm öffnen, öffnen sich alle 
drei!

wo ist der Fehler? Wer kann mir bitte weiterhelfen.

Danke im voraus für Antworten

hier ist der Code:



#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>

int main()
{
  char Eingabe[100];


   printf("Hallo, welche Anwendung willst du oeffnen?\n");
   fgets(Eingabe, 100, stdin);

   if(Eingabe[100] = "p_word")
   {
    printf("Warte, ich oeffne es dir!\n\n");
    ShellExecute(NULL, "open", "WINWORD.exe", NULL, "C:\\Program 
Files\\Microsoft Office\\Office",SW_SHOW);
    }

   if(Eingabe[100]="p_excel")
   {
    printf("Warte, ich oeffne es dir!\n\n");
    ShellExecute(NULL, "open", "EXCEL.exe", NULL, "C:\\Program 
Files\\Microsoft Office\\Office",SW_SHOW);
   }

   if(Eingabe[100]="p_powerpoint")
   {
    printf("Warte, ich oeffne es dir!\n\n");
    ShellExecute(NULL, "open", "POWERPNT.exe", NULL, "C:\\Program 
Files\\Microsoft Office\\Office",SW_SHOW);
    }


   else
   {
       printf("BB!\n");
   }


  system("PAUSE");
  return 0;
}

Autor: Tom M. (tomm) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
man strcmp

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was Dir das Hingerotze meines Vorposters sagen will: Man kann in C nicht 
einfach so Strings in einer if-Abfrage vergleichen. In C++ geht das, 
aber nicht in normalem C. Du musst die Strings mit dem Befehl strcmp 
vergleichen, Beispiele solltest Du finden, wenn Du googlest. Falls Du 
immer noch Probleme hast, kannsr Du Dich ja nochmal melden.

Viel Erfolg!

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> In C++ geht das

Nur zur Sicherheit: so wie es hier steht, geht es in C++ genauso schief.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ein Beispiel für die Verwendung von strcmp: 
http://openbook.galileocomputing.de/c_von_a_bis_z/...

Autor: SL (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch ein Hinweis:
Unabhängig davon, dass man Strings nicht einfach vergleichen kann, würde 
dein Programm auf bei Zahlen fehlschlagen. Ein Vergleich wird immer mit 
zwei Gleichheitszeichen durchgeführt. Du weist hier aber dem 100 Element 
deines Arrays einen String zu und eine Zuweisung ist immer wahr. Deshalb 
öffnen sich auch alle drei Programme.
Zudem solltest du dir auf jeden Fall Array genauer anschauen. Bei einem 
Array mit hundert Elementen hat das letzte Element den Index 99. Man 
fängt bei 0 zu zählen an.

mfg sl

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SL schrieb:
> Noch ein Hinweis:
> Unabhängig davon, dass man Strings nicht einfach vergleichen kann,

Da es in C keinen String-Typ gibt, gibt es auch keine Möglichkeit, zwei 
Strings mit den eingebauen Operatoren zu vergleichen.

> und eine Zuweisung ist immer wahr.

Der Wert einer Zuweisung ist der Wert, der zugewiesen wird.

> Deshalb öffnen sich auch alle drei Programme.

Die öffnen sich, weil die Addressen der Stringkonstanten offentichtlich 
nicht auf ein Nullbyte enden.
Ich kann mir nicht vorstellen, daß der Compiler da keinerlei Warnung 
ausgegeben hat. Warnungen ignoriert man nicht, insbesondere wenn man 
deren Grund nicht kennt.

Autor: X. H. (shadow0815)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach doch mit Zahlen oder Einzelbuchstaben:
Fuer Word w
Fuer Excel 2
...

char input;
input=getchar();

if(input=='w') //was beliebiges zwischen ' ' nimmt den ASCII-Wert davon, 
klein w ist nicht groß W !...
{
 //starte word...
}


if(input=='2')
{
 //starte Excel...
}
...


Als alternative fuer if koennte man bei Zahlen (char = 1 Byte Zahl die 
von "char-Funktionen" eben als Ascii-Code zahlen interpretiert werden) 
auch ein switch case - Konstrukt nehmen:

switch(input){
    case 'w': {/*starte word*/}
      break;
    case '2': {/*starte Excel*/}
      break;
        }

Autor: Wegstaben Verbuchsler (wegstabenverbuchsler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Der Wert einer Zuweisung ist der Wert, der zugewiesen wird.

bezogen auf die Variable, der ein Wert zugewiesen wurde: ja.

Bezogen auf die Codezeile

"if   Variable = zuzuweisender Wert"

 ergibt dieser Ausdruck (d.h. die if-Abfrage) schlussendlich den Wert 
"wahr", da ja die Zuweisung erfolgreich durchgeführt werden konnte.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wegstaben Verbuchsler schrieb:
> Bezogen auf die Codezeile
>
> "if   Variable = zugewiesener Wert"
>
>  ergibt dieser Ausdruck (d.h. die if-Abfrage) den Wert "wahr", da ja die
> Zuweisung erfolgreich durchgeführt werden konnte.

ich bin nicht nicht sicher aber ich würde sagen "wenn der einhalt der 
Zuweisung <> 0 ist".


if 0=0
müsste doch false sein.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wegstaben Verbuchsler schrieb:
>> Der Wert einer Zuweisung ist der Wert, der zugewiesen wird.
>
> bezogen auf die Variable, der ein Wert zugewiesen wurde: ja.
>
> Bezogen auf die Codezeile
>
> "if   Variable = zuzuweisender Wert"
>
>  ergibt dieser Ausdruck (d.h. die if-Abfrage) schlussendlich den Wert
> "wahr", da ja die Zuweisung erfolgreich durchgeführt werden konnte.
Nä, es gibt kein 'Zuweisung erfolgreich'. Entweder, es ist eine 
Zuweisung oder es ist eine Fehlermeldung des Übersetzers.
int x = 0;
int y;

if (y = x)
    puts("wahr");

/* Erzeugt keine Ausgabe */

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin mir aber sicher.

Es ist so wie Rolf Magnus sagt: Ergebnis ist der zugewiesene Wert.
Weil der Zieloperand ein char ist, ist das Ergebnis also
das unterste char der Stringadresse.

Das mit "erfolgreicher Zuweisung" ist die Rubrik Monthy Python
und hier nicht zielführend.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter schrieb:
> if 0=0
> müsste doch false sein.

Falsch, weil die Klammern fehlen und an die linke Null
nichts zugewiesen werden kann, sonst ja.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wegstaben Verbuchsler schrieb:
>> Der Wert einer Zuweisung ist der Wert, der zugewiesen wird.
>
> bezogen auf die Variable, der ein Wert zugewiesen wurde: ja.
>
> Bezogen auf die Codezeile
>
> "if   Variable = zuzuweisender Wert"
>
>  ergibt dieser Ausdruck (d.h. die if-Abfrage) schlussendlich den Wert
> "wahr", da ja die Zuweisung erfolgreich durchgeführt werden konnte.


Das hat mit 'erfolgreich zugewiesen' nichts zu tun. Hauptsächlich 
deshalb, weil es das Konzept einer 'erfolgreichen Zuweisung' in C nicht 
gibt.

Der Wert einer Zuweisung ist der Wert der zugewiesen wurde, nachdem 
irgendwelche möglicherweise notwendigen Datentypwandlungen oder 
Promotions durchgeführt wurden.


   if( i = 0 )

weißt i den Wert 0 zu, und das Ergebnis dieses Ausdrucks ist wieder 0 
(weil 0 zugewiesen wurde) und damit ein logisches FALSE - der then Teil 
wird nicht betreten.


'erfolgreich zugewiesen wurde' suggeriert aber etwas ganz Anderes.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wegstaben Verbuchsler schrieb:
> Bezogen auf die Codezeile
>
> "if   Variable = zuzuweisender Wert"
>
>  ergibt dieser Ausdruck (d.h. die if-Abfrage) schlussendlich den Wert
> "wahr", da ja die Zuweisung erfolgreich durchgeführt werden konnte.

Nein.  Der Wert einer Zuweisung ist der zugewiesene Wert.  Sonst könnte 
x = y = 99 nicht funktionieren.  Wäre der Wert einer Zuweisung „wahr“, 
würde danach in x der Wert 1 stehen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.