2014-01-27 3 views
-1

В настоящее время я работаю над заданием, частью которого я испытываю проблемы. Мне нужно иметь возможность идентифицировать 5 различных символов валюты ($, £, ¥, €, ₹) от терминала и распечатать их обратно. Это функция, которую я назначил для завершения этой части. Нам сказали профессора использовать комбинации кодов UTF-8 для каждого из них, чтобы распознавать отдельные символы. Все, что пытается выполнить эта функция, - это увидеть, является ли следующий символ одним из символов, и если это так напечатать этот конкретный символ. Если он не признает ни одну из 4 «чужих» валют, она будет по умолчанию символом равным $, даже если это была цифра или другой символ. Спасибо за помощь!идентификация и распечатка символов валюты в c

determcur() 
{ 
    char c = getchar(); 
    if(c == 0xC2) 
    { 
      c = getchar(); 
      if(c == 0xA3) 
      { 
        printf("%c%c", 0xC2, 0xA3); 
      } 
      if(c == 0xA5) 
      { 
        printf("%c%c", 0xC2, 0xA5); 
      } 
    } 
    if(c == 0xE2) 
    { 
      c = getchar(); 
      if(c == 0x82) 
      { 
        c = getchar(); 
        if(c == 0xAC) 
        { 
          printf("%c%c%c", 0xE2, 0x82, 0xAC); 
        } 
        if(c == 0xB9) 
        { 
          printf("%c%c%c", 0xE2, 0x82, 0xB9); 
        } 
      } 
    } 
    else printf("%c", 0x24); 
} 
+0

Можете ли вы объяснить, что у вас возникли проблемы с? – IllusiveBrian

+0

Это вопрос и ответ. Вы не получите ответа, если не зададите вопрос. –

+0

Извините, что впервые я использовал этот сайт, проблема в том, что он не распознает символы при вводе и вместо этого всегда возвращает $. – user3238882

ответ

2

Для многих C компилятор char является знаковым 8-разрядным целым числом.

Подписанный 8-разрядное целое число может содержать только значения от -128 до 127. Они не могут содержать значение, как 0x80, 0xE2 и т.д.

Для чего-то вроде if(c == 0xAC) компилятор знает, что значение в c может 't выше 127, и поэтому знает, что условие должно быть ложным. По этой причине компилятор может оптимизировать ваш код (исключая весь код, который не может быть достигнут из-за условий «должен быть ложным») до getchar();printf("%c", 0x24);.

Исправить это использование uint8_t вместо char. Если вы не можете найти uint8_t (например, вы застряли в древнем диалекте C), используйте unsigned char.

Однако ..

Вполне возможно, что вход на самом деле идет из файла или что-то и не приходит с клавиатуры вообще. По этой причине вы должны правильно обращаться с EOF. EOF не поместится в (подписанный или неподписанный) char и не поместится в uint8_t. Это означает, что вы должны сохранить значение, возвращенное getchar(), в int, а затем сравнить с EOF, затем направить его на unsigned char или uint8_t с типом отливки для сравнения 0xAC.

В основном, это становится немного как это:

int c; 

    c = getch(); 
    if(c == EOF) exit(0); 
    if((uint8_t)c == 0xC2) { 
     ... 
    } 
+0

Помогло так много! Большое вам спасибо за то, что вы объясняете все шаг за шагом и даете разные варианты решения проблемы. – user3238882

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