Die überprüfung, ob argv[i] ist ein Gültiger integer, übergeben von Argumenten in main
Ich versuche, um sicherzustellen, dass alle übergebenen Argumente zu main gültig sind Ganzzahlen, und wenn nicht, werde ich drucken ein Fehler. Zum Beispiel, wenn ich eine ausführbare Datei mit dem Namen total, ich würde geben Sie total 1 2 3 4
.
Will ich drucken eine Fehlermeldung, falls ein Ungültiger integer, so dass, wenn ich geben Sie total 1 2 3zy
es wird eine Fehlermeldung ausgegeben. Mein code ist wie folgt.
#include <iostream>
#include<stdlib.h>
using namespace std;
bool legal_int(char *str);
int main(int argc, char *argv[])
{
//int total = 0;
for(int i = 1; i < argc; i++)
{
if( (legal_int(argv[i]) == true) )
{
cout << "Good to go" << endl;
}
else
{
cerr << "Error: illegal integer." << endl;
return 1;
}
}
//int value = atoi(argv[i]);
//cout << value << endl;
}
bool legal_int(char *str)
{
while(str != 0) //need to
if( (isdigit(str)) )//do something here
{
return true;
}
else
{
return false;
}
}
Was ich wissen muss ist wie kann ich den index durch alle Zeichen in der Zeichenfolge, und stellen Sie sicher, Sie sind Ziffern mit der legal_int
Funktion?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie drei Fehler:
while (str != 0)
solltewhile (*str != 0)
. Sie wollen weiter, bis Sie auf eine null in den string nicht bis die Schnur selbst geht Weg.if( (isdigit(str)) )
sollteif( (isdigit(*str++)) )
. Sie wollen schauen, wasstr
Punkte und sehen, ob das ist eine Ziffer, und Sie brauchen, um auf die nächste Ziffer.return true;
Dass nicht dort sein sollte. Sie wollen nicht zurück, nur weil Sie einen einzigen Ziffer.Beim Vergleich jeder Charakter, der Logik sein sollte, wenn es nicht legal ist, false zurück, ansonsten weiterhin:
Was:
Ist es nicht die beste Funktion, aber es sollte dem Zweck dienen. Die
isdigit
Funktion muss einen Charakter zu betrachten, so pass in*str
. Der andere wichtige Punkt ist, dass Sie brauchen, um vorab den Zeiger innerhalb der Schleife.