PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C]fgets: error: invalid operands to binary *



loster
04-11-2007, 10:05
Ich habe gerade erst begonnen mit C da es wie mir scheint mehr möglichkeiten bietet als C++.

In meinem Tutorial wird auschliesslich scanf verwendet ich möchte allerdings
fgets verwenden .
Da ich leider wie gesagt erst angefangen habe kriege ich folgendes script nicht zum laufen..
Deshalb meine frage wo liegt der Fehler und kennt jemand ein Totorial das nur fgets verwendet zur eingabe?



#include <stdio.h>

int main (void)
{
char a[10];
char b[10];
char h[10];
int ergebnis;
printf("Berrechnungsprogramm für Quader\n");
printf("Bitte geben sie die länge ein ein :");
fgets (a, 10, stdin);

printf("Die Zahl lautet %s\n",a);
printf("Bitte geben sie die Breite ein:");
fgets (b, 10, stdin);
printf("Die Zahl lautet %s\n",b);
printf("Bitte geben sie die hoehe ein:");
fgets (h, 10, stdin);
printf("Die Zahl lautet %s\n",h);
ergebnis= a[10]*b[10]*h[10];
printf("Das Volumen betraegt: %d",ergebnis );


return 0;
}

ausgeführt:


Berrechnungsprogramm für Quader
Bitte geben sie die länge ein ein :2
Die Zahl lautet 2

Bitte geben sie die Breite ein:4
Die Zahl lautet 4

Bitte geben sie die hoehe ein:5
Die Zahl lautet 5

Das Volumen betraegt: 53824

lokicall
04-11-2007, 10:32
Ich denke mal du willst ein Programm schreiben,welches das Volumen eines Quaders ausrechnet bei Eingabe der Abmaße.


ergebnis= a[10]*b[10]*h[10];

Funktioniert nicht da Ergebnis vom Typ integer ist und a[10] ein Zeichen bzw. a ein String ist. Der eingegebene String sollte umgewandelt werden in ein integer. Du solltest sowas drin stehen haben:



ergebnis=atoi(a)*atoi(b)*atoi(h);

loster
04-11-2007, 10:43
Danke scheint zu funktionieren..

anda_skoa
04-11-2007, 18:15
Oder gleich mit fscanf Integers eingelesen, bzw.

Ciao,
_

P.S.:


Ich habe gerade erst begonnen mit C da es wie mir scheint mehr möglichkeiten bietet als C++.

Der war gut! :D

loster
04-11-2007, 18:17
Oder gleich mit fscanf Integers eingelesen, bzw.

Ciao,
_

P.S.:
Zitat:
Ich habe gerade erst begonnen mit C da es wie mir scheint mehr möglichkeiten bietet als C++.
Der war gut!
Das war kein Scherz ..
Systemnahe programmierung ist mit C++ schwer möglich..(Bsp:Socket Programmierung)

panzi
04-11-2007, 22:58
Das war kein Scherz ..
Systemnahe programmierung ist mit C++ schwer möglich..(Bsp:Socket Programmierung)

Wieso soll das nicht möglich sein? Ja, dazu verwendet man die C API für sockets oder besser eine der ach so vielen C++ wrapper drumm rum die das ganze schön OO machen. Jedenfalls kann man mit C++ alle C APIs verwenden, aber nicht umgekehrt. Von dem her bietet C++ mehr Möglichkeiten.

loster
05-11-2007, 15:50
C scheint mir insofern systemnäher weil der großteil aus linux in c geschrieben ist und meiner meinung nach C++, Befehle wie fgets ..fehlen..
Natürlich kann man C und C++ mischen worauf ich allerdings wenig lust habe.

panzi
05-11-2007, 16:28
C scheint mir insofern systemnäher weil der großteil aus linux in c geschrieben ist und meiner meinung nach C++, Befehle wie fgets ..fehlen..
Natürlich kann man C und C++ mischen worauf ich allerdings wenig lust habe.

Dafür gibts istream& getline ( istream& is, string& str ) (http://www.cplusplus.com/reference/string/getline.html). Das kann dann auch gleich Zeilen belibiger Länge lesen. Du musst nicht mehr einen Puffer von fixer größer übergeben und wenn der zu klein ist einen neuen allokieren, Daten reinkopieren und weiterlesen. Nein, das macht alles die Funktion getline.

Ja, Linux ist in C geschrieben. Es gibt kaum Kernels die in C++ geschreiben sind (ich glaub die F4 Implementierung Fiasco (http://en.wikipedia.org/wiki/L4_microkernel_family#Fiasco) ist der einzige nennenswerte?), aber es gibt viele Linux Programme die in C++ geschriebensind. Alle KDE Programme und auch viele GNOME/Gtk+ Programme sind in C++ (oder noch höheren Hochsprachen wie Python, Ruby, C#, ...) geschrieben.

Ich will hier jetzt C++ nicht in den Himmel loben. Nein, es gibt genug Gründe warum man C den Vorzug geben könnte, aber das man mit C++ weniger felxiebel ist und nicht mit Sockets programmieren kann stimmt einfach nicht. Mit C++ hat mall alle C und C++ APIs zur Verfügung, mit C nur die C APIs.

Einer der vielen C++ Wrapper für sockets ist z.B.: http://www.nullsoft.com/free/jnetlib/

Ansonsten google nach "c++" sockets (http://www.google.at/search?q=%22c%2B%2B%22+sockets&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:official&client=firefox-a).

anda_skoa
05-11-2007, 16:56
Mal ganz abgesehen davon, dass selbst C Programmierer selten die C API direkt benutzen, sondern meistens auch über bequeme Wrapper wir GLib arbeiten.

Ciao,
_

loster
05-11-2007, 17:18
zum thema socket ..
1.)C hat bei den Funktionen meiner meinung nach einfach mehr möglichkeiten..
2.)Schon mal ein gutes C++ Socket Tutorial gefunden das keine externen
Header beinhaltet? Also ich hab nichts passendes gefunden für linux..

panzi
05-11-2007, 17:56
zum thema socket ..
1.)C hat bei den Funktionen meiner meinung nach einfach mehr möglichkeiten..Vorallem auch um Fehlerzustände zu übergehen weil die per Returnwerten funktionieren und nicht mit exceptions.

2.)Schon mal ein gutes C++ Socket Tutorial gefunden das keine externen
Header beinhaltet? Also ich hab nichts passendes gefunden für linux..Nein. Aber wenn man keine externen libs verwenden will kann man nur ein shell app schreiben. Nix mit graphischer Oberfläche. Und bleibt man bei ANSI C kann man nicht mal getopt verwenden. Also ANSI C + POSIX ist IMHO einfach viel zu wenig. ANSI C + POSIX + STL + boost geht für vieles, aber graphisch ist man damit immer noch nicht.

anda_skoa
05-11-2007, 22:36
zum thema socket ..
1.)C hat bei den Funktionen meiner meinung nach einfach mehr möglichkeiten..

In Bezug auf Sockets? :confused:

Ich würde es ja verstehen, wenn es darum geht, möglichst assemblernahe für eine DSP zu programmieren, aber Sockets?



2.)Schon mal ein gutes C++ Socket Tutorial gefunden das keine externen
Header beinhaltet? Also ich hab nichts passendes gefunden für linux..
Abgesehen davon, dass ich jetzt nicht weiß, was du mit "externen" Headern meinst und es daher als Header eine Zusatzbibliothek interpretiere, ist es in C praktisch genau so, d.h. wenn man nicht gerade gezwungen wird zieht man auch dort die besseren Varianten (u.a. GLib) vor.

Etablierte Bibliotheken sind ja nicht nur bequemer, sondern ermöglichen es dem Entwickler ja hauptsächliche, sich auf die eigentlichen Aufgaben des Programms zu konzentrieren und nicht zum wiederholten Male die selben Lowlevel Abläufe nachzubauen, zu testen, zu bereinigen und zu warten.

Ciao,
_