Se digito le parole "Hello World" nel flusso di input standard, questo programma stamperà i simboli di casella strani invece che l'atteso "Hello World" torna allo standard output.putchar() output strano, perché sta succedendo?
#include <stdio.h>
int main(void)
{
// print out all characters from the stream until '/n' character is found
int ch;
while (ch = getchar() != '\n')
{
putchar(ch);
}
putchar('\n');
}
Sono a conoscenza di come risolvere il problema. Ma perché questa riga di codice è errata?
while (ch = getchar() != '\n')
Qui è possibile trovare un elenco di precedenze degli operatori: http: //en.cp preference.com/w/c/language/operator_precedence. (Mi sono sentito un po 'sciocco postando una risposta con il milione che è appena entrato.: D) – Ulfalizer
Interessante, non pensavo che la precedenza degli operatori in C sarebbe stata diversa da C# e Java. – zxgear
Se stai pensando a questo caso particolare, sembra che sia lo stesso in Java e C#. Sarebbe un male se 'x_eq_y = x == y' fosse interpretato come' (x_eq_y = x) == y', come un esempio sciocco. C ha comunque delle vistose precedenze (che sono state riconosciute dagli autori come un errore, ma sono ancora emulate da altri linguaggi per compatibilità). Ad esempio, 'x == y << z' è lo stesso di' x == (y << z) 'come ti aspetteresti, mentre' x == y & z' è lo stesso di '(x = = y) & z'. – Ulfalizer