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!
Markus schrieb: > In C++ geht das Nur zur Sicherheit: so wie es hier steht, geht es in C++ genauso schief.
Hier ein Beispiel für die Verwendung von strcmp: http://openbook.galileocomputing.de/c_von_a_bis_z/011_c_arrays_013.htm#mjd148b11ca58a4e84fc80121d3c99dbdf
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.
1 | int x = 0; |
2 | int y; |
3 | |
4 | if (y = x) |
5 | puts("wahr"); |
6 | |
7 | /* Erzeugt keine Ausgabe */
|
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.