PTwPZ Kalkulator - SPOJ, trudnosc z wykryciem entera, funkcja getchar()

0
 #include <iostream>
#include <cstdio>

using namespace std;

int main()
{
	int t; cin >> t;
	for (int i = 1; i <= t; i++)
	{

		int wynik = getchar() - 48;
		int a;

		while (a = getchar())
		{
			if (a == '+')
			{
				int liczba = getchar() - 48;
				wynik += liczba;
			}
			else if (a == '-')
			{
				int liczba = getchar() - 48;
				wynik -= liczba;
			}
			else if (a == 13)
				break;
		}
		cout << wynik << endl;
	}
	system("pause");
	return 0;
}

http://pl.spoj.com/problems/PTWPZ083/

Dlaczego mój program nie wykrywa entera jako warunku wyjścia z pętli while? Enter ma znak ASCII 13 z tego co sprawdziłem.

1

system("pause"); to chyba tak srednio potrzebne, poza tym - czemu nie odpalic debuggera (lub w ostatecznosci uzyc printf...) zeby zrozumiec co sie dzieje?
13 w ascii to jest carriage return a nie new line.
moze pomysl o pythonie, rozwiazanie tego zadania:

for _ in xrange(input()): print input()

:)

0
#include <cstdio>
using namespace std;

int main()
  {
   char buff[100];
   unsigned t,i;
   int v;
   for(scanf("%u",&t);t--;printf("%d\n",v))
     {
      for(scanf(" %[^\n]s",buff),v=buff[0]-'0',i=1;buff[i];++i)
        {
         if(buff[i]=='+') v+=buff[++i]-'0';
         else v-=buff[++i]-'0';
        }
     }
   return 0;
  }
0

Już rozkminiłem co było nie tak w moim algorytmie. Problemem było to, że po wczytaniu liczby testów cinem funkcja getchar() pobierała znak końca linii zamiast danej. Teraz jest prawidłowo:

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
	int t; cin >> t;
	int x=getchar();
	for (int i = 1; i <= t; i++)
	{

		int wynik = getchar() - 48;
		int a;

		while (a = getchar())
		{
			if (a == '+')
			{
				int liczba = getchar() - 48;
				wynik += liczba;
			}
			else if (a == '-')
			{
				int liczba = getchar() - 48;
				wynik -= liczba;
			}
			else if (a == '\n')
				break;
		}
		cout << wynik << endl;
	}
	system("pause");
	return 0;
}
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1