Shubham_Kumar Ответов: 2

Как я могу получить выход 2 вместо 3


Я написал простой цикл для увеличения переменной при нажатии клавиши.
Теперь, когда он пытается ввести
азбука
Я получаю результат
1233
Я хочу сделать до
123
как я могу это сделать?????????
Я знаю, что проблема заключается в том, что при печати i цикл возвращается к первому оператору i++ и увеличивает значение переменной i.

Пожалуйста, помогите.

Что я уже пробовал:

#include<iostream>
							  
using namespace std;
							  
int main()
{
   int i=0;;
   int c;
 
   while( (c=getchar())!=EOF)
   {
       i++;
    
       if(c=='\n')
       {
          i--;
       }
									 
      cout<<i;
									  
   }
								  								  
  getchar();
  return 0;
}

2 Ответов

Рейтинг:
2

Patrice T

Используйте отладчик, чтобы точно увидеть, что делает ваш код, и вы поймете причину проблемы.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что он делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
2

OriginalGriff

Это довольно очевидно, но ..... если я расскажу тебе, ты мало что узнаешь.
Компиляция не означает, что ваш код верен! :смеяться:
Подумайте о процессе разработки как о написании электронного письма: успешная компиляция означает, что вы написали электронное письмо на правильном языке - например, на английском, а не на немецком, - а не то, что письмо содержало сообщение, которое вы хотели отправить.

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а затем удвоить его и напечатать ответ, то если бы ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик teh, чтобы выяснить, почему. Поставить точку останова на строке:
while( (c=getchar())!=EOF)

и запустите свое приложение. Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она на самом деле делала, когда вы использовали кнопку "Step over" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?

Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!

Да, я, вероятно, мог бы сказать вам, в чем "проблема" - но это не трудно сделать самому, и вы узнаете что-то действительно стоящее в то же время! Вместо этого я дам вам подсказку: посмотрите, что произойдет, когда вы обработаете последнюю цифру...


Shubham_Kumar

Привет, спасибо за решение. Одно последующее действие мне нужно, кстати, я получил свою ошибку, значение ключа ввода также было добавлено. Но я хочу спросить, так как каждый раз, когда нажимается клавиша, переменная увеличивается, и она печатается. Сэр я думаю что нет никакого способа напечатать общую сумму как если бы я ввел aaa
выход -> 123
Таким образом , нет никакого способа напечатать только 3, единственный вариант-выйти из цикла и распечатать переменную, я прав?
Более того, Извините, что беспокою вас, ребята, из-за такой маленькой проблемы, с этого момента я постараюсь сначала оценить свой код.

OriginalGriff

Выход есть всегда! :смеяться:
Но поскольку я понятия не имею, что вы имеете в виду, я не могу помочь - возможно, если вы попытаетесь объяснить более подробно, что именно вы хотите сделать, и почему это оказывается трудным, я могу немного помочь вам?