2015-06-03 2 views
0

Я написал программу C для подсчета числа вхождений введенного символа. Когда я выполняю, я могу только ввести имя файла. Перед тем, как вводить символ для подсчета, выполняется следующий оператор. Результат, который я получаю, показан ниже.Символ не принимается

 
Enter the file name 
test.txt 
Enter the character to be counted 
File test.txt has 0 instances of 

Вот мой код

#include<stdio.h> 
#include<stdlib.h> 
int main() 
{ 
    FILE *fp1; 
    int cnt=0; 
    char a,ch,name[20]; 
    printf("Enter the file name\n"); 
    scanf("%s",name); 
    //fp1=fopen(name,"r"); 
    printf("Enter the character to be counted\n"); 
    scanf("%c",&ch); 
    fp1=fopen(name,"r"); 
    while(1) 
    { 
    a=fgetc(fp1); 
    if (a==ch) 
     cnt=cnt+1; 
    if(a==EOF)  
     break; 
    } 
    fclose(fp1); 
    printf("File %s has %d instances of %c",name,cnt,ch); 
    return 0; 
} 

Как решить эту проблему?

+2

'scanf ("% c ", &ch);' -> 'scanf ("% c ", &ch);', учитывать пространство –

ответ

5

Это общая проблема начинающих, особенно при использовании семейства функций scanf.

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

Решение очень простое: Скажите scanf читать и отбрасывать любые ведущий Пробельные, поставив единое пространство в формате scanf:

scanf(" %c",&ch); 
// ^
//  | 
// Note leading space 

Если вы по ссылке на scanf reference он расскажет вам, что почти все форматы автоматически считывают и отбрасывают ведущее белое пространство, одним из трех исключений является только формат для чтения одиночных символов, "%c".

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