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


von Richi (Gast)


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;
}

von Tom M. (tomm) Benutzerseite


Lesenswert?

man strcmp

von Markus (Gast)


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!

von Klaus W. (mfgkw)


Lesenswert?

Markus schrieb:
> In C++ geht das

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

von Markus (Gast)


Lesenswert?


von SL (Gast)


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

von Rolf Magnus (Gast)


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.

von X. H. (shadow0815)


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;
        }

von Wegstaben V. (wegstabenverbuchsler)


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.

von Peter (Gast)


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.

von Sven P. (Gast)


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.
1
int x = 0;
2
int y;
3
4
if (y = x)
5
    puts("wahr");
6
7
/* Erzeugt keine Ausgabe */

von Klaus W. (mfgkw)


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.

von Klaus W. (mfgkw)


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.

von Karl H. (kbuchegg)


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.

von Hc Z. (mizch)


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.

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.