C++ - Programmierung Fehler: expected unqualified-id before "{" token
Ich bin ein Neuling in C++, und ich bin versucht, ein "Rechner", die: addiert zwei zahlen subtrahiert zwei zahlen multipliziert zwei zahlen, zwei zahlen teilt, nimmt den Sinus von einer Zahl, nimmt der Cosinus einer Zahl, oder nimmt den Tangens einer Zahl. Hier ist der code:
#include <iostream>;
#include <cmath>;
#include <string>
int main ()
{}
int ask(std::string operation);
{
std::cout<<"Type Addition, Subtraction, Multiplication, Division, Sine, Cosine, or Tangent:\n";
std::cin>>operation;
if (operation="Addition")
{
goto Add
}
float Add(float addend1, float addend2, float answer)
{
Add:
std::cout<<"Insert the first number to be added:\n";
std::cin>>addend1;
std::cout << "Insert the second number to be added:\n";
std::cin>>addend2;
answer=addend1+addend2;
std::cout<<addend1<<"+"<<addend2<<"="<<answer<<"\n";
break
}
}
Wird es mehr Funktionen später, aber mein problem ist auf der Linie 7. Es ist ein Fehler, der sagt: expected unqualified-id before "{" token. Ich weiß, dass mein Einzug ist schrecklich, aber danke!
- Warum... warum... warum
goto
?! Auch ist das label in einer anderen Funktion. Sehr, sehr schlechte Idee. Welchen compiler benutzt du? - Seien Sie vorsichtig, der
=
vs.==
imif
Bedingungen. - Der OP will nicht
==
entweder, er willstrcmp
. - Wow, das ist einige der am meisten gebrochen code, den ich gesehen habe. Und ich habe schon viel gesehen von CS 101 code. Ich war früher eine Art inoffizielle TA vor Jahren.
- Jeder startet irgendwo.
- Mein Tipp wäre, starten Sie noch kleiner als Sie aufgrund der vielen Fehler sehe ich in deinem code. Beginnen Sie mit einem Programm addiert die zwei zahlen und drucken. Dann gehen Sie zum schreiben in eine Funktion. Danach versuchen zu subtrahieren einer Zahl von einer anderen. Gehen Sie langsam, obwohl, fügen Sie eine Zeile, und kompilieren und sehen, ob der compiler versteht es! Du kommst um einen Rechner schließlich
- S.: Das ist wahr. Ich Klang entmutigend, und ich habe nicht wirklich gemeint sein. Mehr eine Beobachtung und eine Empfehlung, um mehr zu erfahren darüber, wie Dinge zu tun.
- Tatsächlich, dieser code ist fehlerhaft in so viele Möglichkeiten, es sollte geschlossen werden mit einem Verweis auf stackoverflow.com/questions/388242/....
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie eine Menge Probleme in Ihrem code.
Ersten, als Ivan Punkte heraus, die Sie versuchen, zu definieren, eine Funktion innerhalb einer Funktion (
ask()
innenmain()
). Das ist nicht gültig.Zweite, Sie haben eine
goto
(warum?!) Sie versuchen zu springen, um ein Etikett in einer anderen Funktion. Ich bezweifle, dass dein compiler wird sogar erlauben, aber wie würden Sie erwarten, dass die Arbeit? Sie sind der Versuch, mit Variablen, die an Ihre Funktion übergebenenaddition
, die es nicht gibt da Sie nie die Funktion aufrufen und der stack hat noch nie setup. Das ist schlecht, tun Sie es nicht, rufen Sie einfach die Funktion richtig.Dritte, die
#include
Präprozessor-Direktive beendet mit einem Zeilenumbruch, kein Semikolon. Das könnte dazu führen, dass einige (relativ) schwer aufzuspüren Kompilierungsfehler.Vierte, Sie sind irrtümlich versucht, weisen die
const char*
"Addition"
zuoperation
wenn das, was Sie bedeutete, wurde die Verwendung der Gleichheits-operator==
. Das wird nicht funktionieren, äther, aber daoperation
ist ein r-Wert und kann nicht zugewiesen werden wie der. Wenn Sie möchten, um es zu ändern müssen Sie deklarieren es als ein Zeiger, aber noch einmal, das ist nicht das, was Sie für semantisch...Wenn Sie möchten, um Zeichenketten miteinander zu vergleichen und (aus welchem Grund auch immer...) sind entschlossen, die auf der Verwendung von Zeigern auf char, dann sollten Sie mit strcmp. Das heißt, Sie sind in C++ landen, so verwenden Sie einfach
std:string
statt.Probieren Sie etwas wie dieses. Ich habe nicht verbesserte Sie Ihren code in sowieso, nur etwas, das kompiliert und ausgeführt werden. Ich habe ein paar änderungen vorgenommen.
Abgesehen von loszuwerden, ein paar syntax-Fehler, Ihre ursprüngliche
Add
Funktion nahm das Ergebnis alsfloat
argument. Die Zuordnung zu innerhalb der Funktion ändern Sie nur eine Kopie. Würden Sie brauchen, um einen Zeiger oder Referenz, wenn Sie wollen, dass die Anrufer zu sehen, wird der geänderte Wert, aber Sie brauchen das nicht auf alle zu, wie Sie können einfach das Ergebnis zurückgeben.Den string-Vergleich wird groß-und Kleinschreibung, so würden Sie wahrscheinlich wollen, um es zu ändern zu sein, der groß-und Kleinschreibung. Ich gehe davon aus, dass keine Lokalisation hier :). Ich bin nicht auf der Bühne, auf Fehler überprüft die Eingabe, so werden Sie sich bewusst, dass es möglicherweise fehl, wenn der Benutzer etwas anderes als eine gültige floating point Zahl.
#include <iostream>; #include <cmath>; #include <string>; int main () { int ask (){ char operation [20]; std::cout<<"Type Addition, Subtraction, Multiplication, Division, Sine, Cosine, or Tangent:\n"; std:cin>>operation; if (operation="Addition"){ float addend1, float addend2, float answer std::cout<<"Insert the first number to be added:\n"; std::cin>>addend1; std::cout << "Insert the second number to be added:\n"; std::cin>>addend2; answer=addend1+addend2; std::cout<<addend1<<"+"<<addend2<<"="<<answer<<"\n"; } } }
aber jetzt habe ich: Expected } an deС++ nicht erlaubt, verschachtelte Funktionen. Sie haben die Funktion
main()
und versucht zu erklären, Funktionask()
drin. Und der compiler nicht weiß, was Sie will.Kommentierte ich deinen code ein wenig, vielleicht bekommt Sie begann:
goto
überhaupt.Lassen Sie uns versuchen, diese brechen..
Sie sollten nicht verwenden ; auf der precompiler-Direktiven.
Sollte
.
Sehen Ivans Antwort für diese
Können Sie std::string statt, die ist viel einfacher zu handhaben. Dann schreiben Sie
.
Nicht wissen, was hier Los ist.. aber lasst uns Pause Neben der eigenen Funktion
.
Vergessen Sie nicht, dass Sie zum definieren der Variablen
Hoffe, dies hilft Ihnen auf dem Weg.
;
bedeutet leere Anweisung. Seine völlig gültigen code. ideone.com/yOEHzwarning C4067: unexpected tokens following preprocessor directive - expected a newline
;;;;;;;;;;;;
.Erste int Fragen() was ist das.Warum fängst du einen block hier.
Zweitens haben Sie zwei {s-und drei -} s das ist, weil die Fragen().
Ich denke, dass c++ nicht unterstützt anonyme Funktionen.
Dritten warum verwenden Sie springen,wenn Sie haben eine Funktion,nur die Funktion aufrufen.
Fourh Ihr neben func sollen entweder nichtig oder entfernen Sie die letzten parameter.
Ich denke auch, dass Sie nicht brauchen, string.h-Datei, es sei denn, Sie einige sehr fortgeschrittene funcs,die char-array sollte genug sein, für Ihr Programm.