Я попытался выполнить следующий простой код в ubuntu 15.10. Но код ведет себя нечетно, чем ожидалось
#include int main(){ int n,i=0; char val; char a[20]; printf("\nEnter the value : "); scanf("%s",a); printf("\nEnter the value to be searched : "); scanf("%c",&val); int count=0; for(i=0;i<20;i++){ if(a[i]==val){ printf("\n%c found at location %d",val,i); count++; } } printf("\nTotal occurance of %c is %d",val,count); return 0; } output: -------------------------- Enter the value : 12345678 Enter the value to be searched : Total occurance of is 0
Второй scanf для получения значения для поиска, похоже, не работает. Остальная часть кода выполняется после первого scanf без второго входа.
После первого scanf () в каждом scanf () в части форматирования помещаем пробел
Так что измените это
scanf("%c",&val);
в этот
scanf(" %c",&val);
Причина в том, что scanf () возвращается, когда видит новую строку, а при первом запуске scanf () вы вводите ввод и нажмите enter. scanf () потребляет ваш вход, но не остается новой строкой, поэтому после scanf () потребляет оставшуюся новую строку.
Помещение пробела в части форматирования делает оставшуюся новую линию потребленной.
Вы можете использовать fgets()
:
#include int main() { int n, i = 0; char val; char a[20]; printf("\nEnter the value : "); fgets(a, 20, stdin); printf("\nEnter the value to be searched : "); scanf("%c", &val); int count = 0; for (i = 0; i < 20; i++) { if (a[i] == val) { printf("\n%c found at location %d", val, i); count++; } } printf("\nTotal occurance of %c is %d", val, count); return 0; }
или очистить stdin
:
#include void clearstdin(void) { int c; while ((c = fgetc(stdin)) != EOF && c != '\n'); } int main() { int n, i = 0; char val; char a[20]; printf("\nEnter the value : "); scanf("%s",a); clearstdin(); printf("\nEnter the value to be searched : "); scanf("%c", &val); int count = 0; for (i = 0; i < 20; i++) { if (a[i] == val) { printf("\n%c found at location %d", val, i); count++; } } printf("\nTotal occurance of %c is %d", val, count); return 0; }
Кроме того, см. C: Несколько scanf, когда я вводим значение для одного scanf, он пропускает второй scanf
printf("\nEnter the value : "); scanf("%s",a); printf("\nEnter the value to be searched : "); scanf("%d",&val); // here is different
я не знаю почему, но код выше работает …
scanf("%d",&val);
Вы можете использовать «% c» вместо «% c» для строки формата. Пустой приводит к тому, что scanf () пропускает пробел (включая символы новой строки) перед чтением символа.