Sida 1 av 1

Ny lösning på felhantering av int men problem igen..[LÖST]

Postat: 08 maj 2014, 10:40
av ZerQ
Hej
Sitter och arbetar med lösningar för att kunna felhantera ett tal som matas in via cin. Detta är lösningen jag håller på med just nu.

Detta är anropande kodsnutt:

Kod: Markera allt

cout << "Ange vilket tal du vill kolla upp till, avsluta med enter: ";
	do
	{
		cin >> cInput;
		if(FelHantInMatning(cInput))
		{
			break;
		}
		else
		{
			cout << "Du har angett en felaktigt inmatning, prova igen: ";
			cin >> cInput;
		}
	} while(true);

	siKandidat = int(cInput); // Detta gör om char typen till en int
Och detta är funktionen som tar emot anropet och skall göra felkontrollen:

Kod: Markera allt

// Funktion för felhantering av inmatningen, den tar en char inmatning och kollar med isdigits.
bool FelHantInMatning(char *cInput)
{
	for(short int i = 0; cInput[i]  != '\0'; i++)
	{
		if(!isdigit(cInput[i]))
		{
			return false;
		}
	}
	return true;
}
Jag får ingen kompilator varning vid kompilering men så fort jag trycker enter vid inmatningen så får jag Access violation och programmet bryter. Jag har försökt sätta breakpoints för att se vart i koden det blir problem men hittar inte rätt.

Är det någon som kan hjälpa mig med var det blir problem, jag har en aning men vet såfall inte hur jag ska fixa det. Jag har aldrig kunnat få char att ta emot fler än 1 bokstav eller siffra men i övningsboken så kör dom så och det fungerar, antingen gör jag fel eller så är det min kompilator VisualStudio express 2010 som strular...

// ZerQ

Re: Ny lösning på felhantering av int men problem igen..

Postat: 08 maj 2014, 14:09
av gusnan
Testa att använda getline för inmatningen istället för cin direkt.

Exempel:

Kod: Markera allt

#include <iostream>
#include <string>
using namespace std;

main ()
{
  string name;

  cout << "Please, enter your full name: ";
  getline (cin,name);
  cout << "Hello, " << name << "!\n";

  return 0;
}

Re: Ny lösning på felhantering av int men problem igen..

Postat: 10 maj 2014, 16:03
av gusnan
Hur är din cInput definierad?
Om du har definierat den helt enkelt som

Kod: Markera allt

char *cInput;
så är det ju inte så konstigt att programmet kraschar då du läser in data från cin till den - cInput har en adress, men då du inte har satt något värde till den så kan det vara vilken adress som helst, vilket är orsaken till att det kraschar (den skriver till något minne som den inte kan/ska).

Om du reserverar minne för inmatningen innan din cin-inläsning så skall du se att det fungerar. Typ:

Kod: Markera allt

cInput = new char[256];
(glöm inte att deallokera minnet när du är klar med det! :) )

Re: Ny lösning på felhantering av int men problem igen..

Postat: 13 maj 2014, 09:42
av ZerQ
Hej Gusnan

Tack för att du tog dig tid och svara, jag har varit lite upptagen så jag har inte kollat här men jag såg att din lösning är bättre än vad jag satt med då, men jag har löst det genom att använda cin.get() och läsa tecken för tecken ifrån bufferten...

på det viset kan jag checka med isdigit om det är korrekt :) fungerar perfekt nu. Men tack så mycket för svaret :D