2012-03-02 3 views
0

Я нахожу это очень странным. Насколько я могу сказать, что нет ничего плохого в этом утверждении, но при его запуске он всегда оценивает значение false, независимо от того, в какое число я вхожу.Что не так с этим правильным условием? :)

if(temp>=1 && temp<=5) 

temp является целым числом, которое я только хочу быть числом от 1-5. Итак, первая половина заявления читает if(temp is equal to or greater then one AND if temp is less then or equal to 5). Я думаю, что это должно возвращать true, если вы введете 3, например, так как это больше, чем 1 И меньше, чем 5, но это не так. Что мне не хватает? :)

EDIT полный цикл:

int temp; 
int arrayStorlek=0; 
int tempBytesIndex[5]; 

    for(;;){ 
    temp=getchar(); 
    if(temp=='n' || temp=='N'){ 
     printf("Du är nöjd"); 
     beraknaHand(kortHand); 
     } 
    else{ 
     printf("Hära \n%i\n ", temp); 
     system("pause"); 
     if(isdigit(temp)){ 
      if(temp<=5 && temp>=1){ 
       printf("temp är större än 0 och mindre än 5"); 
       tempBytesIndex[i++] = temp-'0'; 
       arrayStorlek++; 
       } 
      else 
       printf("du måste ange ett intervall mellan 1-5"); 
       } 
     else if (temp=='\n' || temp==EOF){ 
      printf("Slut på inlästa filer"); 
       system("pause"); 
       break; 
       } 
     else 
      printf("\n Du får bara ange siffror, eller ange N om du är nöjd"); 
} 

При печати переменной temp она возвращает значение выше 50, даже если ввести 3. Как это может быть? :)

+2

Выглядит хорошо для меня. Отправьте примерный код, используя это! –

+2

У вас есть точка с запятой. – pmg

+3

Попробуйте добавить printf ("% d \ n", temp); чтобы узнать, какое значение он считает темпом. Одна из возможностей заключается в том, что temp содержит символ «3» вместо номера 3. –

ответ

1

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

+0

Я объявил переменную temp как int, чуть выше цикла for, поэтому я был бы очень удивлен, если бы его объявили как char :) –

+0

теперь я вижу это, я редактирую ответ, вы используете getchar wrong – Alecs

+0

Спасибо. getChar возвратил ascii, поэтому я отредактировал условие на if (temp <=53 && temp> = 49), и теперь он работает. Благодаря! :) –

3

Следующая тестовая программа:

#include <stdio.h> 
int main() { 
    int temp = 3; 
    if(temp>=1 && temp<=5) { printf("yes"); } 
    else { printf("no"); } 
} 

печатает "да". Итак ... да, ваше понимание состояния является правильным и, по-видимому, одно из ваших других предположений является ложным.

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