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