#include <stdio.h>
void main(void)
{
int a;
int result;
int sum = 0;
printf("Enter a number: ");
scanf("%d", &a);
for( int i = 1; i <= 4; i++ )
{
result = a ^ i;
sum += result;
}
printf("%d\n", sum);
}
Warum ist ^ funktioniert nicht als Netzbetreiber?
Funktioniert gut für mich, nachdem ich den Rückgabewert von main() durch “int” ersetzt habe. Ich hatte aber nicht erwartet, dass es funktioniert, da <stdio.h> und <math.h> werden normalerweise anstelle von verwendet "stdio.h" und "math.h". Aber es sieht so aus, als ob GCC sich nicht wirklich darum kümmert.
– Sergei Tachenov
30. Januar 2011 um 14:18 Uhr
@Abid Es ist oft gut, Fragen zu bearbeiten, aber in diesem Fall haben die Bearbeitungen die Frage bedeutungslos gemacht (Sie haben das Problem durch die Lösung ersetzt). Es ist besser, die ursprünglichen Fragen zu belassen, damit andere lernen können – aber es ist jetzt nur noch verwirrend (Es gibt kein “^” in der Frage). Schlagen Sie vor, dass Sie zur letzten Änderung zurückkehren, die als Frage sinnvoll ist
– peter.murray.rust
30. Januar 2011 um 14:25 Uhr
Zurück zu verwenden geändert ^ da die Frage (und die Antworten) sonst wenig Sinn machen. Da peoro Ihre Frage richtig beantwortet hat, sollten Sie sie akzeptieren und fortfahren. Wenn Sie haben Ein weiterer Frage, dann stellen Sie bitte eine andere Frage. Bearbeiten Sie dieses nicht, um die ganze Arbeit bedeutungslos zu machen.
– paxdiablo
30. Januar 2011 um 14:30 Uhr
@Sergey Tachenov: Oh, ich sehe jetzt, dass Sie pow() verwendet haben? Ich dachte, Sie hätten den Originalcode des OP (mit ^ für pow) zum Laufen gebracht.
– Oystein
30. Januar 2011 um 15:04 Uhr
void main ??? Äh…
– PaulR
30. Januar 2011 um 16:00 Uhr
Sergei Tachenov
Nun, zuerst einmal die ^ Operator in C/C++ ist das bitweise XOR. Mit Befugnissen hat das nichts zu tun.
Nun zu Ihrem Problem mit der Verwendung der pow() Funktion, etwas googeln zeigt, dass es hilft, eines der Argumente zu verdoppeln:
result = (int) pow((double) a,i);
Beachten Sie, dass ich das Ergebnis auch in umgewandelt habe int wie alle pow() Überladungen geben doppelt zurück, nicht int. Ich habe keinen MS-Compiler zur Verfügung, daher konnte ich den obigen Code nicht überprüfen.
Es gibt keinen Operator für die Stromversorgung, den Sie verwenden müssen pow Funktion aus math.h (oder einer anderen ähnlichen Funktion):
result = pow( a, i );
Ich habe diese Funktion verwendet.
– Abid Ali
30. Januar 2011 um 14:05 Uhr
@Abid Ali: Sie müssen math.h einschließen. Setzen Sie diese Zeile an den Anfang Ihrer Datei: #include <math.h>
– Junge
30. Januar 2011 um 14:09 Uhr
@Abid Ali: die Programm Sie verwenden, um Ihren C-Code zu schreiben und zu kompilieren, folgt nicht dem Standard von C: Es kann keinen gültigen C-Code kompilieren. Weiß nicht warum. Ich würde Ihnen empfehlen, auf einen standardkonformeren Compiler umzusteigen. Wenn Sie Windows verwenden, versuchen Sie, Ihre Programme (zum Beispiel) in Dev-C++ herunterzuladen und zu schreiben, das GCC als Compiler verwendet. Kann Ihnen nicht helfen, herauszufinden, warum dieser Code nicht mit Microsoft Studio funktioniert.
– Junge
30. Januar 2011 um 14:31 Uhr
@peoro, überladene Makros? Makros werden nicht eingegeben, sie akzeptieren alles. Und C kann unmöglich überladene Funktionen haben, da es keine Namensverstümmelung gibt. In Bezug auf den Fehler zeigt einiges Googeln, dass eine Problemumgehung darin besteht, eines der Argumente in Double Like umzuwandeln (int) pow((double) a,i) – Ich habe das Ergebnis auch gecastet, da es double zurückgibt, nicht int.
– Sergei Tachenov
30. Januar 2011 um 14:33 Uhr
@Abid Ali: versuche diese Zeile durch diese zu ersetzen: pow( (double)a, (double)i );
– Junge
30. Januar 2011 um 14:37 Uhr
pow() funktioniert nicht mit intdaher der Fehler “error C2668:’pow’: mehrdeutiger Aufruf einer überladenen Funktion”
Schreiben Sie Ihre eigene Potenzfunktion für intS:
int power(int base, int exp)
{
int result = 1;
while(exp) { result *= base; exp--; }
return result;
}
ints sollten automatisch zu befördert werden doubles, sollten sie nicht? Ihr Link handelt sowieso von C++.
– Junge
30. Januar 2011 um 14:32 Uhr
Da diese Funktion Floats und Doubles akzeptiert, weiß sie beim Aufrufen mit ints nicht, in welchen Typ sie ints umwandeln soll.
– max
30. Januar 2011 um 14:34 Uhr
“Ihr Link handelt sowieso von C++.” Aber der Poster verwendet den C++-Compiler, da er wegen Überladung einen Fehler hat.
– max
30. Januar 2011 um 14:35 Uhr
Dies ist in mehrfacher Hinsicht suboptimal. Zuerst werden Sie die Schleife so oft ausführen, wie in exp angegeben. Je nach Größe von int kann das ziemlich viel sein. Der größte sinnvolle Exponent ist jedoch pow(2, sizeof(int)*CHAR_BIT-1). Aber es gibt noch Raum für Verbesserungen. pow(x, y) == pow(2, n) * pow(x’, r). Der Term pow(2,n) kann durch einfache Bitverschiebung um n implementiert werden. Das Bestimmen von x’ und r kann schneller sein als das Iterieren dieser Schleife.
– Datenwolf
30. Januar 2011 um 15:08 Uhr
Ich habe die einfachste Implementierung als Beispiel gegeben, wie sie in Algorithmen-Lehrbüchern gezeigt wird.
double power, x, y;
x = 2;
y = 5;
power = pow(x, y); /* include math.h header file */
printf("2^5 = %lf", power);
Es funktioniert nicht, weil sowohl c als auch c++ keine Operatoren haben, um Power-Operationen durchzuführen.
Was Sie tun können, ist, Sie können die Bibliothek math.h und die Funktion pow verwenden.
` #include<stdio.h>
#include<math.h>
int main(){
int base = 3;
int power = 5;
pow(double(base), double(power));
return 0;
}`
Nick Anderegg
Sie müssen tatsächlich pow(number, power); verwenden. Leider funktionieren Karat nicht als Machtzeichen in C. Wenn Sie feststellen, dass Sie etwas in einer anderen Sprache nicht tun können, liegt das oft daran, dass es eine andere Funktion gibt, die dies für Sie erledigt.
anup
math.h einbinden und mit gcc test.c -lm kompilieren
Ich fürchte, OP verwendet GCC nicht. :-(
– Junge
30. Januar 2011 um 14:15 Uhr
@Abid: Welchen Compiler verwendest du?
– anup
30. Januar 2011 um 14:19 Uhr
@peoro, das Lustige ist, dass es in GCC gut funktioniert. Es schlägt mich, warum es nicht mit MS-Compiler funktioniert.
– Sergei Tachenov
30. Januar 2011 um 14:21 Uhr
@Sergey Tachenov: stimme dir zu: lies meinen letzten Kommentar zu meiner Antwort.
Funktioniert gut für mich, nachdem ich den Rückgabewert von main() durch “int” ersetzt habe. Ich hatte aber nicht erwartet, dass es funktioniert, da
<stdio.h>
und<math.h>
werden normalerweise anstelle von verwendet"stdio.h"
und"math.h"
. Aber es sieht so aus, als ob GCC sich nicht wirklich darum kümmert.– Sergei Tachenov
30. Januar 2011 um 14:18 Uhr
@Abid Es ist oft gut, Fragen zu bearbeiten, aber in diesem Fall haben die Bearbeitungen die Frage bedeutungslos gemacht (Sie haben das Problem durch die Lösung ersetzt). Es ist besser, die ursprünglichen Fragen zu belassen, damit andere lernen können – aber es ist jetzt nur noch verwirrend (Es gibt kein “^” in der Frage). Schlagen Sie vor, dass Sie zur letzten Änderung zurückkehren, die als Frage sinnvoll ist
– peter.murray.rust
30. Januar 2011 um 14:25 Uhr
Zurück zu verwenden geändert
^
da die Frage (und die Antworten) sonst wenig Sinn machen. Da peoro Ihre Frage richtig beantwortet hat, sollten Sie sie akzeptieren und fortfahren. Wenn Sie haben Ein weiterer Frage, dann stellen Sie bitte eine andere Frage. Bearbeiten Sie dieses nicht, um die ganze Arbeit bedeutungslos zu machen.– paxdiablo
30. Januar 2011 um 14:30 Uhr
@Sergey Tachenov: Oh, ich sehe jetzt, dass Sie pow() verwendet haben? Ich dachte, Sie hätten den Originalcode des OP (mit ^ für pow) zum Laufen gebracht.
– Oystein
30. Januar 2011 um 15:04 Uhr
void main
??? Äh…– PaulR
30. Januar 2011 um 16:00 Uhr