2017-02-16 2 views
1

У меня проблема с сравнениями с использованием getchar() и перенаправления файлов.Сравнение getchar с символом возвращает предупреждение и дает мне неправильный код

У меня есть код, который напоминает это:

char result = getchar(); // getchar returns the next char in the file 
int linecount = 0; 

if (result == "\n") { 
    linecount++; 
} 

Но я получаю предупреждение при компиляции. В нем говорится, что я не могу сравнивать int с указателем, но из моего понимания результат - это char, и поэтому это «\ n», поэтому я действительно запутался. Я также могу использовать printf («% c», result »), и он отлично работает, подразумевая, что результатом является char. Кто-нибудь знает, почему я получаю эту ошибку? Спасибо! Также, запустив код, linecount всегда будет возвращать 0 даже если первый символ в файле, который я использую в качестве моего ввода, является символом новой строки.

+3

'' \ n "' -> '' \ n''. Период. –

+2

О, а также 'char result' ->' int result' –

+1

Действительно 'getchar' возвращает' int', который вы назначаете 'char', а затем сравниваете с' char * '. –

ответ

0

Вы сравниваете char с char *, то есть строку. Значения "" (doublequoted) рассматриваются как строки в C , так что ваш код должен быть

if (result == '\n') { 
    linecount++; 
} 

в качестве альтернативы можно использовать strcmp или strncmp с полукоксом литого к указателю, но это не обязательно.

Обратите внимание, что размер символа меньше, чем int, поэтому преобразование из char в int не заставляет вас ничего потерять.

+1

_Alternatively, вы могли бы использовать strcmp или strncmp с char, наложенным на указатель_, а не на самом деле, где NUL-терминатор? –

+0

Хорошо, спасибо большое! Я никогда не знал разницы между «» и «», поэтому это было очень полезно! – Keeyan

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