2012-01-05 2 views
-4

Приведенный ниже код должен подсчитать количество нажатых клавиш и распечатать их на экране вместе с процентом нажатых цифровых клавиш. Когда я запускаю код, процент всегда равен 0. Почему?Неспособность рассчитать процентное число штрихов клавиш, которые являются числами

#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 


int main() 
{ 
int c,count=0,count1=0; 
float d; 
while ((c=getch())) 
{ 
    count = count++; 
if (c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8'||c=='9'||c=='0') 
    { 
     count1=count1++; 
    } 
    if (c=='!') 
    { 
     d=(count1/count*100); 
     printf("\nnumbers of keys is %d percentage of number keys is %.3d percent",count,d); 
    } 

    } 
return 0; 

}

+5

Опрос. Ты делаешь это неправильно. – log0

+4

Увеличивая, вы тоже делаете это неправильно. –

+2

+1 как для комментариев выше, так и для 1 ниже. 1) Не используйте все колпачки, 2) Не используйте неопределенное поведение ('x = x ++' == неопределенное поведение, посмотрите точки последовательности). 3) Деление целых чисел не выполняется. – Joe

ответ

0

Проблема заключается в том, что даже если d является поплавок, count и count1 являются int. Таким образом, вы делаете целочисленную арифметику, когда вы говорите

d=(count1/count*100); 

ли это вместо:

d=((float)count1/count*100); 

Кастинг count1 к floatconverts the division to floating point.

2

Линии

count = count++; 

и

count1 = count1++; 

не определено поведение, так что все ставки выключены. Даже если это не было неопределенное поведение, оно не будет делать то, что вы хотите, потому что x++ возвращает значение x до приращения.

Пусть это будет просто ++count; и ++count1;.

+0

Хороший улов. 'count ++;' и 'count1 ++; 'тоже будут делать. – Caleb

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