Ok, tôi là một noob với C, nhưng tôi nghĩ mã là cơ bản và đơn giản. Chương trình này dành cho một bài tập đại học, và được cho là có hàm 'isdigit()' trong đó. Đây là mãLỗi biên dịch GCC: định dạng '% c' dự đoán đối số của loại 'char *', nhưng đối số 2 có loại 'int' [-Wformat]
//by Nyxm
#include <stdio.h>
#include <ctype.h>
main()
{
char userChar;
int userNum, randNum;
srand(clock());
printf("\nThis program will generate a random number between 0 and 9 for a user to guess.\n");
/*I changed it from '1 to 10' to '0 to 9' to be able to use the isdigit() function which
will only let me use a 1 digit character for an argument*/
printf("Please enter a digit from 0 to 9 as your guess: ");
scanf("%c", userChar);
if (isdigit(userChar))
{
userNum = userChar - '0';
randNum = (rand() % 10);
if (userNum == randNum)
{
printf("Good guess! It was the random number.\n");
}
else
{
printf("Sorry, the random number was %d.\n", randNum);
}
}
else
{
printf("Sorry, you did not enter a digit between 0 and 9. Please try to run the program again.\$
}
}
Khi tôi cố gắng biên soạn, tôi nhận được lỗi sau
week3work1.c: In function ‘main’:
week3work1.c:14:2: warning: format ‘%c’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat]
gì trên trái đất đang xảy ra? Tôi rất muốn được giúp đỡ. Bất kỳ trợ giúp nào cả. Tôi nghiêm túc về việc từ bỏ chương trình này. Tại sao nó nói nó mong đợi đối số của 'char *' khi sách giáo khoa của tôi cho thấy rằng "% c" là dành cho ole 'char' thông thường? Tôi đang sử dụng nano, gcc và Ubuntu nếu điều đó tạo ra bất kỳ sự khác biệt nào.
'gcc' tạo nhiều cảnh báo cho chương trình của bạn. Bạn nên sửa * tất cả * của chúng. Ví dụ: bạn đang thiếu '#include' (bắt buộc đối với 'srand()' và 'rand()') và '#include ' (bắt buộc đối với 'clock()'). –
@KeithThompson Khi biên dịch, tôi không còn lỗi nữa, và chương trình hiện hoạt động như tôi muốn. Vì vậy, tôi đoán tôi đang yêu cầu nếu nó sẽ tiếp tục làm việc? Bởi vì trong sách giáo khoa của tôi, câu lệnh tiền xử lý duy nhất cần là '#include' và '#include ' là dành cho hàm isdigit(). –
Nyxm
Bạn cần tiêu đề tôi đã mô tả ở trên nếu bạn định gọi các chức năng đó. Có những trường hợp mà bạn có thể thoát ra mà không sử dụng chúng, nhưng tôi sẽ không đi vào chi tiết; chỉ cần thêm các chỉ thị '# include'. gcc sẽ cảnh báo về các hàm gọi nếu bạn sử dụng '-std = c99 -pedantic'. Bạn đang sử dụng sách giáo khoa nào? Nếu nó cho thấy một ví dụ gọi là 'rand()' mà không có '#include' hoặc gọi 'clock()' mà không có '#include ', thì sách giáo khoa của bạn sai. –