2015-03-22 3 views
0

Я пытаюсь написать код, который читается из файла, и работает с символами, которые он читает. Суть в том, что он должен исправить ошибки капитализации, присутствующие в файле, который он читает.Проверка новой строки в текстовом файле

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

int fix_caps(char* ch, int* char_in_word, int* line_num){ 

char a; 
ch = &a; 

if(a != '\n'){ 
    return 0; 
}else{ 
    return 1; 
} 

if(a == ' ') 
    *char_in_word = 0; 

if(*char_in_word == 1) 
    a = toupper(a); 

if(*char_in_word > 1) 
    a = tolower(a); 

char_in_word++; 

} 

Однако функция, в которой она находится, всегда возвращает 0, когда она должна возвращать 1 в конце каждой строки. Что я делаю не так?

+1

Есть несколько вещей, которые я не понимаю: вы назначаете ch адресу непосвященной переменной, и функция всегда будет выходить с 'if' в верхней части функции; он никогда не попадет в 'if (a == '')' часть, потому что обе ноги оператора if приводят к возврату. – Carcigenicate

+0

Вы позволяете 'ch' указывать на' & a', но 'a' неинициализирован. Так что более чем вероятно всегда '! = '\ N''. Я думаю, что вы хотели сделать, это 'char a = * ch' – Beko

+0

Спасибо, я хотел, чтобы это было' char a = * ch'. К сожалению, он по-прежнему не исправляет случай символов, переданных в него. –

ответ

1
the execution will never get beyond this 'if control block: 

char a; 
ch = &a; 

if(a != '\n'){ 
    return 0; 
}else{ 
    return 1; 
} 

there is a few reasons it 'always' returns 0 
1) 'a' is on the stack and could contain anything. 
2) the chances of the 'trash' that is on the stack where 'a' 
    is located are 255:1 against the trash happening to contain 
    a new line character. 

nothing beyond the 'if control block is ever executed because 
an 'if' control block only has two execution paths 
and both paths contain a return statement. 
+0

Правильно отформатируйте свой ответ. Не добавляйте текст, отпечатывая его как код. –

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