2014-02-05 2 views
1

Я пишу программу, которая будет вычислять значения резисторов на основе цветового ввода от пользователя. Функция, которая дает мне проблемы, предназначена для получения цвета в виде строки и возврата соответствующего целочисленного значения.C - Неожиданный вывод функции (базовый/начальный код)

Однако, несмотря на различные изменения, он возвращает только значение из инструкции else, которая является всего лишь сообщением main() о том, что строка не соответствует ни одному из цветов.

Незаконченный код ниже:

#include <stdio.h> 
#include <math.h> 

int values123(char c[10]); 

void main(void) 
{ 
    int bands = 0; 
    char band1[10]; 
    char band2[10]; 
    char band3[10]; 
    char band4[10]; 
    char band5[10]; 
    printf("Number of colour bands: "); 
    scanf_s("%i", &bands); 
    printf("\nBand 1: "); 
    scanf_s("%s", band1); 
    if (values123(band1) == 100) 
    { 
     printf("Colour is invalid!"); 
    } 
    fflush(stdin); 
    printf("\nBand 2: "); 
    scanf_s("%s", band2); 
    fflush(stdin); 
    printf("\nBand 3: "); 
    scanf_s("%s", band3); 
    fflush(stdin); 
    printf("\nBand 4: "); 
    scanf_s("%s", band4); 
    fflush(stdin); 
    if (bands == 5) 
    { 
     printf("\nBand 5: "); 
     scanf_s("%s", band5); 
     fflush(stdin); 
    } 

    getch(); 
} 
int values123(char c[10]) 
{ 
    if (strcmp(c, "black") == 0) 
     return (0); 
    else if (strcmp(c, "brown") == 0) 
     return (1); 
    else if (strcmp(c, "red") == 0) 
     return (2); 
    else if (strcmp(c, "orange") == 0) 
     return (3); 
    else if (strcmp(c, "yellow") == 0) 
     return (4); 
    else if (strcmp(c, "green") == 0) 
     return (5); 
    else if (strcmp(c, "blue") == 0) 
     return (6); 
    else if (strcmp(c, "violet") == 0) 
     return (7); 
    else if (strcmp(c, "grey") == 0) 
     return (8); 
    else if (strcmp(c, "white") == 0) 
     return (9); 
    else 
     return (100); 
} 

Пожалуйста, не стесняйтесь сообщать мне о любых ошибках, которые я делаю, являются ли они связаны с вопросом или нет, так как я уверен, что я делаю тонну!

Кстати, это не вопрос о домашнем задании (насколько он похож на один), я студент-электроника, и я был в настроении практиковать С, создав программу, связанную с тем, что я изучаю:)

Спасибо!

+1

Вы не можете сравнивать строки, используя '==' - вам нужно взглянуть на некоторые из функций сравнения строк C. – PeterJ

+0

'scanf_s ("% s ", & band5);' должно быть 'scanf_s ("% s ", band5);' –

+0

Почему нет амперсандов? Что он делает точно? Иногда мои scanf не работают без него:/ И thx PeterJ, я посмотрю на это! Спасибо за очень быстрые ответы каждый: o –

ответ

0

Если вы используете == для сравнения двух строк, то сравнение двух строк равно или равно, что определенно неравномерно. Так что попробуйте следующий

if(strcmp(c, "black") == 0) 
{ 
    return 0; 
} 

И в то время как с помощью scanf на строках (массив символов) вам не нужно явно использовать &, так как в массивах C по адресу пропускания по умолчанию.

РЕДАКТИРОВАТЬ: используйте еще, если лестница, так как она ищет аналогичный набор.

+0

Я на самом деле только что закончил попытку, прежде чем увидеть это и ожидал, что он сработает, однако, похоже, он все еще возвращает 100 из другого. Рад, что я изучаю и исправляю эти основные ошибки, хотя! –

+0

Что было введено ?? вы рассмотрели алфавит ниже и верхний регистр также обряд? – const

+0

Также, когда я удаляю &, программа выходит из строя при первом сканировании f, она встречает ... –

Смежные вопросы