2015-09-15 3 views
-1

Я попытался написать программу, в которой будет высший персонаж, введённый человеком. Я сделал программу, которая работает с наивысшим числом без каких-либо проблем, но с персонажами она не работает. Вот мой код:Получить «самый высокий» символ в C

#include <stdio.h> 
#include <string.h> 

int main(int argc, const char * argv[]) { 
    char characters[5]; 
    char highest = "a"; 

    printf("Please enter five characters: \n"); 
    for (int i = 0; i <= 4; i+=1) { 
     scanf("%c", characters[i]); 
    } 

    printf("These are the characters you entered: "); 

    for (int i = 0; i <= 4; i+=1) { 
     printf("%c ", characters[i]); 
    } 

    for (int i = 0; i <= 4; i+=1) { 
     if (characters[i] > highest) { 
      highest = characters[i]; 
     } 
    } 

    printf("\nThe highest character is %c", highest); 
} 

Что я делаю неправильно?

+0

Действительно ли 'char high =" a ";' фактически компилируется? – Carcigenicate

+0

Ну, на Xcode (Macintosh) он скомпилируется. Почему «а», а не «а»? – PeterPan

+0

Да, потому что вы назначаете 'String' переменной' char' – Carcigenicate

ответ

5

Вы пытаетесь преобразовать строковый литерал "a" в char. Вы должны использовать буквенный символ.

char highest = "a"; 
//should be 
char highest = 'a'; 

Кроме того, scanf требует указатель для хранения результата чтения.

scanf("%c", characters[i]); 
//should be 
scanf("%c", &characters[i]); 

Live Demo

+0

Это решает проблему, спасибо! Теперь возникает другая проблема. Он читает только три, а не пять символов на моем Mac. Live Demo вместо этого работает отлично. – PeterPan

+0

Это, вероятно, чтение пробелов. – TartanLlama

+0

Что делать? – PeterPan

3

char highest = "a"; является неправильным, его необходимо, чтобы компилировать char highest = 'a';.

+0

На Xcode (Mac OS X) он компилируется в обоих направлениях. Но это все еще не работает. – PeterPan

+0

@ S.Eberl Пожалуйста, уточните, что «это не работает» ... – leemes

0

Две проблемы:

Символьные литералы указаны в одинарные кавычки, а не двойные кавычки. Так что это:

char highest = "a"; 

Должно быть:

char highest = 'a'; 

Кроме того, формат %c спецификатор для scanf ожидает указатель на char, но вы передаете ему char.

Так что:

scanf("%c", characters[i]); 

Должно быть:

scanf("%c", &characters[i]); 

Это должно решить ваши проблемы.

+0

Почему указатель на char не просто символ? – PeterPan

+0

Все параметры функций передаются по значению. Если вы просто перейдете в 'char', тогда' scanf' не сможет его изменить. Пропуская адрес этого 'char',' scanf' может разыменовать указатель и изменить местоположение ячейки, на которое он указывает, а именно элемент массива в вызывающей функции. – dbush

-1

Существует еще одна потенциальная проблема, которая не была решена. В C гарантируется, что символы, представляющие цифры ('0', '1', ..., '9') приведены в порядке, но нет такой гарантии, что буквы ('a', 'b', ...) находятся в любом конкретном порядке.

+1

ASCII для 'a' меньше, чем 'b' или 'c'. Разве это недостаточно (если вы забыли о проблеме, чувствительной к регистру)? – PeterPan

+0

Используя EBCDIC, обратите внимание, что 'J' + 1 не равно 'K' ('K' is 'J' + 6) – FredK

+1

Почему это так важно для меня? Mac OS X также использует ASCII. – PeterPan

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