Tôi gặp sự cố khi so sánh hai ký tự. Tôi đã viết một bài toán C cơ bản để thử các đối số dòng lệnh.C - So sánh hai ký tự
Đây là mã của tôi cho đến nay:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
char ch;
char *type = "";
char *gender = "";
int baby = 0;
int count = 0;
/* Options:
* -t = type of pet
* -g = gender
* -b = baby or adult
*/
while ((ch = getopt(argc, argv, "t:g:b")) != EOF)
switch (ch) {
case 't':
type = optarg;
break;
case 'g':
gender = optarg;
break;
case 'b':
baby = 1;
break;
default:
fprintf(stderr, "Invalid option.\n");
return 1;
}
argc -= optind;
argv += optind;
printf("You have chosen a %s.\n", type);
if (gender == 'f')
puts("It's a girl");
if (gender == 'b')
puts("It's a boy.");
// The main command line arguments should be about the traits of the pet
printf("%s", "Traits: ");
for (count = 0; count < argc; count++)
printf("%s ", argv[count]);
return 0;
}
Vì vậy, nếu tôi gõ này vào thiết bị đầu cuối:
$ ./pet_shop -t dog -g f cute small
tôi có được điều này là đầu ra:
You have chosen a dog:
Traits: cute small
Sản lượng nó thiếu thông tin về giới tính, nó phải là một cô gái kể từ khi tôi bước vào f. Nhưng tôi đã thử kiểm tra bằng printf ("% i", giới tính) đưa ra giá trị 0. Có phải g == 'f' không chính xác cách so sánh hai ký tự không?
Các định nghĩa như 'char * type =" ";' chỉ đọc, tức là bạn không thể gán trực tiếp chuỗi cho 'type' khi bạn đã khai báo nó. Đọc qua thông tin này - http://msdn.microsoft.com/en-us/library/8kc54dd5(v=vs.80).aspx – Nobilis
Bật cảnh báo trình biên dịch (ví dụ: với '-Wall' của GCC) và các lỗi như thế này sẽ dễ dàng được tìm thấy. – interjay
@Nobilis: Bạn chắc chắn có thể gán thứ cho 'loại'. Bạn không thể viết vào giá trị được chỉ định nhưng OP không làm điều đó. – interjay