Что не так с этим кодом C? Я хочу знать количество 1 во входной строке

Я хочу получить число 1 (как символ) во входной строке, но оно не работает. Пожалуйста, расскажите мне причину.

#include"stdio.h"#include"string.h"
int main()
{
int n,l,count1=0,i;
scanf("%d",&n);
char a[n];
gets(a);
for(i=0;i<n;i++)
{
if(a[i]=='1')
count1++;
}
printf("%d",count1);
puts(a);
return 0;
}

0

Решение

Ваш код пропустит gets () из-за введенного ранее символа новой строки, символ новой строки является разделителем для метода gets (). хотя использование getchar () сразу после scanf должно работать, но я рекомендую использовать это

#include"stdio.h"#include"string.h"#include <iostream>

int main()
{
int n,l,count1=0,i;
scanf("%d",&n);
char a[n];
std::cin>>a;
for(i=0;i<n;i++)
{
if(a[i]=='1')
count1++;
}
printf("%d",count1);
std::cout<<a;
return 0;
}
2

Другие решения

Вы пометили этот вопрос с помощью C ++, и есть простой способ решить эту проблему в C ++:

#include <algorithm> // for std::count
#include <iostream>  // for std::cin and std::cout
#include <string>    // for std::string

int main()
{
std::string s;
std::cin >> s; // reading in the string
auto n = std::count(s.cbegin(), s.cend(), '1'); // counting '1' characters
std::cout << "the number of '1's in the string \"" << s << "\" is: " << n << "\n";
}

Нажмите здесь для демонстрации.

Если ваш компилятор не поддерживает C ++ 11, тогда замените auto от std::size_t,

1

  1. Не учитывается конец строки ('\0') персонажи обеспечены.
  2. фактический ввод не является новой строкой, введенной в scanf потребляется в gets,
  3. Количество фактически введенных символов может быть меньше n,
  4. gets возможно, вызвало переполнение. (Устарело)
0

Старомодный ‘C’:

int ch ;
int count = 0 ;
while ((ch = getchar()) != EOF)
{
if (ch == '1')
count += 1 ;
} ;

(Не проверено!)

0

Это:

char a[n];
gets(a);

неправильно, это слишком маленький буфер, так как нет места для терминатора, который gets() положу туда.

Никогда не делай этого. На самом деле, никогда не используйте gets() для всего.

Вместо этого делай

char line[256];

if(fgets(line, sizeof line, stdin) != NULL)
{
printf("read a line, process here\n");
}
-1
По вопросам рекламы [email protected]