У меня возникают проблемы со следующим кодом, и я не могу понять, почему из цикла не печатается. С помощью этого кода я хочу, чтобы программа игнорировала любые пробелы, введенные пользователем, и после ввода пробела ранее введенный номер хранится в местоположении массива. Как и это, я хочу, чтобы 6 и 78 сохранялись в 2 местах массива, а не хранили их отдельно как 6 7 8.
Это мой код:
while ((in=getchar()) != '0')
{
if (in == ' ')
{
printf("space\n ");
continue;
}
else
{
printf("assigning\n ");
input[i]=in;
}
i++;
}
printf("Out of Loop");
Мой вывод при вводе 5 6 78: присваивание пространства, назначающего пространство, назначающее назначение присвоения
С этим выходом я сомневаюсь, что 78 хранится в одном месте памяти.
Я был бы очень признателен за вашу помощь, спасибо
C++:
std::vector<int> v;
std::string s;
int i;
std::getline( std::cin, s); // read full line with whitespaces
std::istringstream iss( s); // prepare to process the line
while( iss >> i) v.push_back( i); // read into i and push into vector if
// operator>> was successful
C:
int array[ 10];
int i = 0, retval;
while( i < 10 && ( retval = scanf( "%d", &array[ i++])) == 1) ;
if( i == 10) {
// array full
}
if( retval == 0) {
// read value not an integer. matching failure
}
if( retval == EOF) {
// end of file reached or a read error occurred
}
Прежде всего, я очень сомневаюсь, что ваш цикл while никогда не закончится, даже если вы сделали это с '\0'
, потому что вы используете переменную char
для хранения ввода. Не строки, Только строки используют '\0'
в конце, Как мы можем ввести '\ 0' с клавиатуры..???. даже если вы хотите сохранить его как '0'
, вам нужно было бы ввести 0 в качестве последнего номера, чтобы закончить цикл (который, я думаю, вы этого не хотите).
Таким образом, решение таково: -
После ввода чисел вы нажмете клавишу ENTER, которая будет генерировать символ новой строки '\n', поэтому вам нужно проверить новый символ строки ('\n'
). И поскольку вы используете функцию getchar(), она вернет EOF ( -1) в конце ввода, поэтому важно проверить его тоже. Итак, вы должны проверить как "\n", так и EOF сразу во время цикла. Наконец, вы также должны проверить номер индекса массива ( он должен быть меньше 1), в котором вы храните цифры.
Я приложил некоторые усилия, чтобы вы поняли программу в комментариях.
int main()
{
int i=0;
int input[10]={0}; //here only 10 integers can be entered(hence i should be i<10)
int in; //To store input character
int num=0; //To store number which is converted from character.
int new=1; //To check if new number is started 0=false 1=True.
int count=0;//This is just to know how many numbers entered,also used to print numbers at end.
while ((in=getchar()) != '\n' && (in!=EOF) && i<10)//should check for both '\n' and EOF and array index also
{
if (in == ' ')
{
printf("space\n ");
if(new==0) //if new Number is not started yet.
{
new=1; //Start of a New number.(a number entered after space)
i++; //As new number is started it should be stored in new array index.
}
continue; //if space is entered just go to begining
}
else
{
printf("assigning\n ");
num=in-48; //converts a character to number (ex:- converts '3' to 3)
input[i]=(input[i]*10)+num; //storing the number..This is important do a paper work to understand this step.
new=0; //still in same number(we are still processing same number)
}
}
printf("Out of Loop \n");
count=i+1; //This gives correct count of numbers entered
for(i=0;i<count;i++) //to print numbers.
printf("%d ",input[i]);
return 0;
}
ВЫВОД:-
E:> Example.exe
78 2 65 998 1
назначение
назначение
пространство
назначение
пространство
,
,
,
пространство
назначение
Вне цикла
78 2 65 998 1
Вы принимаете персонажа по своему характеру. Таким образом, вы будете хранить только отдельные цифры или игнорировать эти цифры.
Вы можете хранить целые числа, как это (расширение кода):
bool currentNumberStarted = false;
int currentNumber = 0;
int idx = 0;
while ((in=getchar()) != '0')// you probably want '\0' instead of '0'
{
if (in == ' ')
{
if (currentNumberStarted)
{
input[idx]=currentNumber;
idx++;
currentNumberStarted = false;
}
printf("space\n ");
continue;
}
else
{
printf("assigning\n ");
currentNumberStarted = true;
currentNumber *= 10;
currentNumber += in;
}
}
printf("Out of Loop");