2013-11-24 14 views
5

Có thể scanf loại dữ liệu được xác định không?C - Nhận Loại đầu vào Enum

#include <stdio.h> 
enum numberByMonth {jan=1,feb,mar,apr,may,jun,jul,aug,sep,okt,nov,dec}; 
main(){ 
printf("\n"); 
printf("Get Number By Month (type first 3 letters): "); 
enum numberByMonth stringy; 
scanf("%u",stringy); 
printf("Your month number is: %u",stringy); 
} 

Ai đó có thể giúp tôi chọn loại dữ liệu nào? Tôi đặt nó thành% u vì gcc đã nói với tôi rằng đó là một số nguyên không dấu.

+2

Tại sao chính() không có loại? –

+2

Trình định dạng định dạng của bạn là tốt. Bạn cần chuyển địa chỉ 'stringy' vào' scanf'. tức là 'scanf ("% u ", & stringy)' – simonc

+0

AAAAAH cảm ơn bạn simonc, tôi vừa quên ký hiệu và. Cảm ơn. – Mathias

Trả lời

2

Mã bạn đã viết phải hoạt động, nhưng không theo cách bạn dự định, trong thực tế enum bị đe dọa dưới dạng số nguyên sau khi biên dịch và vẫn không có dấu vết trong tệp đối tượng của "jan, feb, mar, apr, , jun, jul, aug, sep, okt, nov, dec ", vì lý do này chương trình của bạn chỉ cần phân tích một số unsigned từ dòng lệnh với scanf và trả về cùng một số sau khi printf .. Bạn có thể muốn điều này

#include <stdio.h> 
#include <string.h> 
char* months[] = {"jan","feb","mar","apr","may","jun","jul","aug","sep","okt","nov","dec"}; 

int main() 
{ 
    printf("\n"); 
    printf("Get Number By Month (type first 3 letters): "); 
    char str[3]; 
    scanf("%s",str); 
    int i; 
    for(i=0; i<12; i++) 
    { 
     if(!strcmp(str,months[i])) 
     { 
      printf("Your month number is: %d",i+1); 
     } 
    } 
    return 0; 
} 

không sử dụng enums, nhưng điều này là hợp lý vì enums được sử dụng để bảo toàn khả năng đọc nguồn mà không làm giảm hiệu quả và vì lý do này bị đe dọa là số nguyên không phải chuỗi, vì vậy nếu bạn muốn phân tích chuỗi, bạn phải sử dụng chuỗi bởi vì bạn phải so sánh đầu vào của người dùng với "jan", "feb", v.v.

+0

Vâng, thực ra tôi đã thực hiện chương trình đó để kiểm tra enums, nhưng bạn đã đúng, nó không hoạt động theo cách dự định. – Mathias

+0

Vì vậy, tại sao không giải thưởng cho anh ta câu trả lời? – Mawg

Các vấn đề liên quan