Код, который вы написали, должен работать, но не так, как вы планировали, на самом деле перечисление производится как целое после компиляции и не остается следом в объектном файле вашего "jan, feb, mar, apr, may , июнь, июль, август, сентябрь, оКТ, ноябрь, декабрь», по этой причине ваша программа просто разбирает беззнаковое число из командной строки с зсапЕ и возвращает тот же номер после Printf .. Вы, наверное, хотел, чтобы этот
#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;
}
, который не использует перечисления, но это разумно, потому что перечисления используются для сохранения читаемости исходного кода без ухудшения эффективности и по этой причине обрабатываются как целые числа, а не строки, поэтому, если вы хотите, чтобы строка была синтаксической разборкой, вы должны использовать строки, потому что вы должны сравнивать пользовательский ввод с «jan», «feb» и т. д.
Почему main() без типа? –
Ваш спецификатор формата в порядке. Вам нужно передать адрес 'stringy' в' scanf'. то есть 'scanf ("% u ", & stringy)' – simonc
AAAAAH спасибо simonc, я просто забыл амперсанд. Благодарю. – Mathias