2013-05-28 2 views
1

У меня есть простая функция C, где у меня есть имя пользователя пути, и функция проверяет его, является ли он допустимым файлом или нет.Обработка строки ввода пользователя

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

int main(void) { 

    char cFileChoice[256]; 
    FILE * rInputFile; 
    unsigned int cFileLength; 

    printf("\nPlease supply a valid file path to read...\n"); 

    fgets(cFileChoice, 255, stdin); 
    cFileLength = strlen(cFileChoice) - 1; 

    if (cFileChoice[cFileLength] == "\n") { 
     cFileChoice[cFileLength] = "\0"; 
    } 
    rInputFile = fopen(cFileChoice, "r"); 
    if (rInputFile != NULL) { 
     printf("Enter 'c' to count consonants or enter 'v' for vowels: "); 
    } 
    else { 
     printf("Not a valid file\n"); 
    } 
    return 0; 
} 

Только после запуска файла файл возвращается как недействительный, независимо от того, является ли он допустимым путем или нет. Я удалил newline персонаж \n и заменил его на null terminator\0, но он по-прежнему не распознает правильный путь.

У меня очень минимальный опыт работы с C, и я не уверен, где я должен искать исправление?

EDIT:

Это компиляция предупреждения, которые я получил:

test.c: In function ‘main’: 
test.c:15:34: warning: comparison between pointer and integer [enabled by default] 
    if (cFileChoice[cFileLength] == "\n") { 
           ^
test.c:16:34: warning: assignment makes integer from pointer without a cast [enabled by default] 
     cFileChoice[cFileLength] = "\0"; 
          ^

Опять я не знаю, как исправить это "предупреждение"?

+0

Компиляция с включенными предупреждениями. У вас их будет немало. Вернитесь после того, как вы их исправили. –

+0

@ H2CO3 Я отправил компиляционные предупреждения, но я не уверен, как их исправить. – tijko

+1

попробуйте одинарные кавычки ... –

ответ

3

"\n" и "\0" являются строковыми литералами (и "\0" является особенно странным строковым литералом). Вы хотите сравнить с символьными литералами: '\n' и '\0'.

У вас также есть номер =, где вы хотите получить == во втором сравнении (тот, который должен быть по сравнению с '\0').

Вы должны прочитать comp.lang.c FAQ section 8, Characters and Strings.

+0

Я ценю ссылку, которую я прочитаю. Потрясающие! Я исправил цитаты и ее работу. У меня есть чему поучиться и прочитаю ссылку, которую вы положили, Еще раз спасибо. – tijko

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