Member 12592538 Ответов: 1

Почему я не могу ввести случай 1, когда l==0


#include<iostream>
#include<string>
#include<stdio.h>
void main()
{
	using namespace std;
	struct cases
	{
		char str[30];
		int i, j, end;

	};
	cases c[5];
	int n,l;
	cout << "Enter the no. of cases\n";
	cin >> n;
	//now looping to recieve the strings
	for ( l = 0;l < n;l++)
	{
		fgets(c[l].str, 25, stdin);
	//get each string info
		c[l].end = strlen(c[l].str)-2;
		c[l].i = c[l].end;
	}
	//now looping to initiate each process
	for (int l = 0;l < n;l++,cout<<"\n")
	{ 
		
		cout << "case #" << l + 1<<": ";
		//scan the word
		a:
		while ((c[l].str[c[l].i]!= ' ') && (c[l].i>-1))
		{
			c[l].i--;
		}
		for (c[l].j = (c[l].i) + 1;c[l].j <= c[l].end; c[l].j++)
		{
			cout << c[l].str[c[l].j];
		}
		cout << " ";
		(c[l].i)--;
		c[l].end = (c[l].i);
		if (c[l].i != -2)
			goto a;

	}





	system("pause");
}


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

когда я ввожу n= 2, он запрашивает один раз, но должен спрашивать дважды ..
проблема в том, что где-то / / зацикливается на получении..
я ввожу n, сколько раз я хочу ввести строки..

1 Ответов

Рейтинг:
2

leon de boer

Не вижу проблемы с вашими циклами, они работают от 0..n-1, так что это должно быть поведение fgets. Я буду Хаззард догадываться, что cin для ввода количества случаев не удаляет символ новой строки, и fgets видит его и падает через первый раз.

Возможно, было бы неплохо, чтобы пользователь и отладка также поместили приглашение на экран в этом цикле .. например, " запись x: " :-)

cout << "Entry " << l+1 << ":";


В основном просто используйте отладчик, поставьте точку останова в операторе fgets и следите за тем, что происходит.

Я не уверен, что вы хотите начать смешивать fgets и cin, поскольку cin не основан на поведении новой строки, в то время как fgets-это так.

Другие придирки формат main обычно таков
int main(int argc, char**argv)

и struct case действительно должен быть определен выше и вне main, так как в конечном итоге вы захотите, чтобы процедура и функции могли его использовать.