Си. Неверные выходные данные.

программирование программы ошибка си gcc

Программа на выходе выдаёт число, которое больше на 2(обычно так). В чём проблема? Компилятор ошибок не выдаёт.
Суть программы:
Составить программу, которая определяет, сколько цифр в символьной строке. Программа должна работать только при вводе пароля «QreAtop»
----------------------------------
#include <stdio.h>
#include <string.h>
/////////////////////////////////////////
int checkpass()
{
char pass[] = "QreAtop", answ[80];
puts("Пароль:");
gets(answ);
if (strcmp(pass, answ))
return 0;
else
return 1;
}
/////////////////////////////////////////
int chiskol(char a[], int N)
{
int sum=0, i;
for(i=0; i<N; i++)
if (a[i] >= '0' && a[i] <= '9')
sum++;
return sum;
}
/////////////////////////////////////////

int main()
{
int i;
char a[80];
if (checkpass() == 0)
{
puts("Неверный пароль");
return 1;
}
else
{
puts("Введите вашу строку");
gets(a);
i = chiskol(a, 80);
printf("Ответ : %d", i);
return 0;
}
}

Примечание:
Спасибо, PetSerAl, всё время забываю) Если предложите решение, то поставлю ваш ответ лучшим!
Ответы:
Если закрыть глаза на переполнение буфера, то ошибка здесь: chiskol(a, 80) — даже если пользователь ввёл менее 79 символов, то Вы всё равно проверяете их все, в том числе любые данные, которые окажутся после завершающего нулевого символа.
int chiskol(char a[]){
   int sum=0, i;
   for(i=0; a[i]; i++)
   if (a[i] >= '0' && a[i] <= '9')
       sum++;
   return sum;
}
#include <stdio.h>
#include <string.h>
/////////////////////////////////////////
int checkpass()
{
char pass[] = "QreAtop", answ[80];
puts("pass:");
gets(answ);
if (strcmp(pass, answ))
return 1;
else
return 0;
}
/////////////////////////////////////////
int chiskol(char a[], int N)
{
int sum=0, i;
for(i=0; i<N; i++)
if (a[i] >= '0' || a[i] <= '9')
sum++;
return sum;
}
/////////////////////////////////////////


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.