öffnen von Office Anwendungen über C-Programm

Gast #1863894
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;
}
Gast #1863941
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!
Gast #1864047
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
Gast #1864478
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.
#1864520
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;
        }
Gast #1864601
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.
Gast #1864615
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 */
#1864616
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.
#1864619
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.
#1864620
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren