Nếu tôi nhập từ "Hello World" vào luồng nhập chuẩn, chương trình này sẽ in ra các ký hiệu hộp lạ thay vì "Hello World" dự kiến trở lại đầu ra tiêu chuẩn.putchar() đầu ra lạ, tại sao điều này lại xảy ra?
#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');
}
Tôi biết cách khắc phục sự cố. Nhưng tại sao dòng mã này không chính xác?
while (ch = getchar() != '\n')
Bạn có thể tìm thấy danh sách các toán tử ưu tiên tại đây theo cách: http: //en.cp preferences.com/w/c/language/operator_precedence. (Cảm thấy một chút ngớ ngẩn đăng một câu trả lời với triệu mà chỉ cần đến in: D) – Ulfalizer
Thú vị, tôi không nghĩ rằng ưu tiên nhà điều hành trong C sẽ khác với C# và Java. – zxgear
Nếu bạn đang nghĩ về trường hợp cụ thể này, thì nó có vẻ giống nhau trong Java và C#. Sẽ rất tệ nếu 'x_eq_y = x == y' được hiểu là' (x_eq_y = x) == y', như một ví dụ ngớ ngẩn. C có một số tiền lệ đáng lo ngại mặc dù (đã được thừa nhận bởi các tác giả như là một sai lầm, nhưng vẫn còn được mô phỏng bởi các ngôn ngữ khác để tương thích). Ví dụ: 'x == y << z' giống với' x == (y << z) 'như bạn mong đợi, trong khi' x == y & z' giống với '(x = = y) & z'. – Ulfalizer