C простым сравнением доступа к массиву - PullRequest
1 голос
/ 28 сентября 2010
int isEmpty(char x [1000]){
    int i = 0;

    while( x[i] == " " || x[i] == "/t" || x[i] == ""){
        i++;
    }

    if (i != 999)
        return 1;
    }

    return 0;
}

Полученные ошибки:

предупреждение: сравнение между указателем и целым числом

предупреждение: сравнение со строковым литералом приводит к неопределенному поведению

Я понимаю, что мой код читает слишком много, как Java, я еще не полностью освоил синтаксис Си.

Ответы [ 5 ]

5 голосов
/ 28 сентября 2010

Проблема в том, что вы выражаете char значения с помощью строковых литералов. Вместо того, чтобы заключать их в двойные кавычки ", используйте одинарные кавычки '

while( x[i] == ' ' || x[i] == '\t' ) {

Пара других вопросов.

  • Вы, вероятно, имеете в виду \t, а не /t. Первый - символ табуляции, а второй - два символа
  • Не уверен, что вы пытаетесь получить с помощью "". Возможно \0
2 голосов
/ 28 сентября 2010

Поскольку вы сравниваете с символьными константами , вам необходимо использовать одинарные кавычки, а не двойные, как:

x[i] == ' '

Двойные кавычки используются для строковых констант, таких как "foo".Таким образом, "\n" является строковым литералом с одним символом, а '\n' является константой символа.

0 голосов
/ 29 сентября 2010
int isEmpty(const char *x)
{
  return EOF==sscanf(x,"%*s");
}

также должен делать то, что вы хотите, это C89 и тестировать пробелы для вас.

0 голосов
/ 28 сентября 2010

В дополнение к предыдущим ответам, я думаю

  1. Должна ли проверка продолжаться, если в x обнаружена NULL (\0)?Я думаю, что ответ может быть следующим: NO .
  2. Лучше отделить логику обнаружения пустого символа от логики пустой строки
  3. Часть (i != 999)неясно.Разве это не будет (i == 1000)?
  4. В коде ОП есть несопоставимые скобки.

Вот моя версия:

/* return 1 when c is considered empty, 0 otherwise */
int isEmptyChar( const char c ) {
    return c == ' ' || c == '\t';
}

enum { N = 1000 };

/* return 1 when x is considered empty, 0 otherwise */
int isEmptyString( const char x[ N ] ) {
    for( int i = 0; i < N; i++ ) {
        if( x[ i ] == '\0' ) {
            break;      /* stop, if NUL termination is found */
        }
        if( ! isEmptyChar( x[ i ] ) ) {
            return 0;   /* early return if non-empty char is found */
        }
    }
    return 1;
}
0 голосов
/ 28 сентября 2010
  1. Символы должны быть заключены в ' ' (одинарные кавычки).
  2. Это \t, а не /t для символа табуляции.
  3. Удалить случай с пустой строкой "" (это эквивалентно NULL).
...