Xin vui lòng có gì sai với mã này?

lập trình


C
#include <stdio.h>

int main()
{
    int number1;
    float number2;

    printf("Enter Integer:");
    scanf("%d",&number1);

    printf("Enter Float:");
    scanf("\n%f",&number2);

    printf("The Resulting Integer Is: %d",&number1);
    printf("\nThe Resulting Float Is: %f",&number2);

    return 0;
}

Những gì tôi đã thử:

Xin vui lòng có gì sai với mã này?

Giải pháp 1

C++
printf("The Resulting Integer Is: %d",&number1);
printf("\nThe Resulting Float Is: %f",&number2);

Vấn đề nằm ở hai dòng mã này. Chức năng printf hy vọng các đối số của nó sẽ được truyền theo giá trị và bạn đang truyền địa chỉ của chúng. Để sửa lỗi này, bạn có thể xóa ký hiệu và nó trông như thế này:

C++
printf("The Resulting Integer Is: %d\n", number1);
printf("The Resulting Float Is: %f\n", number2);

Lưu ý rằng tôi đã di chuyển ký tự dòng mới. Tôi thích luôn theo sau một dòng văn bản với ký tự dòng mới để các dòng tiếp theo bắt đầu ở cột số 0. Đây là thói quen tôi đã có từ rất lâu rồi.

Một lưu ý khác – Tôi thích sử dụng chức năng hơn fget[^] để có được đầu vào từ bảng điều khiển. Nó bao gồm ký tự dòng mới trong chuỗi và có hành vi ít kỳ quặc hơn quét[^]. Sau đó người ta có thể gọi đoạn phim giới thiệu[^] Và ở phía trên[^] để có được các giá trị số tương ứng của chúng. Đối với mục đích của bạn, điều quan trọng là bao gồm ký tự dòng mới vì các hàm chuyển đổi bỏ qua nó.

Giải pháp 2

Khi bạn in chúng ra bằng cách sử dụng & cung cấp địa chỉ của số 1 và số 2, bạn không muốn địa chỉ mà bạn muốn có giá trị.

C++
#include <stdio.h>

int main()
{
	int number1;
	float number2;

	printf("Enter Integer:");
	scanf("%d", &number1);

	printf("Enter Float:");
	scanf("\n%f", &number2);

	printf("The Resulting Integer Is: %d", number1);
	printf("\nThe Resulting Float Is: %f", number2);

	return 0;
}

コメント

タイトルとURLをコピーしました