M
hey coder,
hab ein kleines problem. habe ein prog geschrieben, dass eine eingabe nach falsch verschachtelten klammern überprüft. jedoch funktioniert es noch nicht wenn ich z.b. // für ein kommentar oder "..." für einen string eingebe, das es dann die klammern nach dem kommentag bzw. die klammern in dem string ignoriert und nicht nach verschachtelung überprüft. fehler muss bei case"/": und case"\"": sein, ich finde aber keine lösung bitte um eure hilfe. hier der code:
class Program
{
public static string Programmschreiben()
{
Console.WriteLine("Code:");
string code = Console.ReadLine();
return code;
}
public static void Syntaxprüfen(string code,ref int anzrundek,ref int anzeckigek,ref int anzgeschweiftek,
ref int anzanfuehrungsz,ref int anzanfuehrungss)
{
string[] arr = new string[code.Length];
for (int i = 0; i < code.Length; i++)
{
arr[i] = Convert.ToString(code[i]);
switch (arr[i])
{
case "(":
anzrundek++;
try
{
for (int k = i+1; k < code.Length; k++)
{
arr[k] = Convert.ToString(code[k]);
if ((arr[k] == "{") || (arr[k] == "}") || (arr[k] == "]"))
{
throw new Exception();
}
}
}
catch(Exception)
{
Console.WriteLine("Fehler1:Falsche Verschachtelung nach (!");
}
break;
case "[":
anzeckigek++;
try
{
for (int k=i+1;k<code.Length;k++)
{
arr[k] = Convert.ToString(code[k]);
if((arr[k]==")")||(arr[k]=="}"))
{
throw new Exception();
}
}
}
catch(Exception)
{
Console.WriteLine("Fehler2:Falsche Verschachtelung nach [!");
}
break;
case "{":
anzgeschweiftek++;
try
{
for(int k=i+1;k<code.Length;k++)
{
arr[k] = Convert.ToString(code[k]);
if((arr[k]=="]")||(arr[k]==")"))
{
throw new Exception();
}
}
}
catch(Exception)
{
Console.WriteLine("Fehler3:Falsche Verschachtelung nach {!");
}
break;
case ")":
anzrundek--;
break;
case "]":
anzeckigek--;
break;
case "}":
anzgeschweiftek--;
break;
case "/":
if (arr[i + 1] == "/")
{
//for (int k=i+1; k< code.Length; k++)
//{
anzrundek = 0;
anzeckigek = 0;
anzgeschweiftek = 0;
anzanfuehrungsz = 0;
anzanfuehrungss = 0;
//}
return;
}
break;
case "\"":
anzanfuehrungsz++;
for (int k = i + 1; k < code.Length; k++)
{
arr[k] = Convert.ToString(code[k]);
if (arr[k] == "\"")
{
anzanfuehrungsz--;
}
}
break;
case "'":
anzanfuehrungss++;
for (int k = i + 1; k < code.Length; k++)
{
arr[k] = Convert.ToString(code[k]);
if (arr[k] == "'")
{
anzanfuehrungss--;
}
}
break;
}
}
Console.WriteLine("Anzahl an runden Klammern: {0}",anzrundek);
Console.WriteLine("Anzahl an eckigen Klammern: {0}",anzeckigek);
Console.WriteLine("Anzahl an geschweiften Klammern: {0}",anzgeschweiftek);
Console.WriteLine("Anzahl an Anführungszeichen: {0}", anzanfuehrungsz);
Console.WriteLine("Anzahl an Anführungsstrichen: {0}", anzanfuehrungss);
bool z=((anzrundek == 0) && (anzeckigek == 0) && (anzgeschweiftek == 0) && (anzanfuehrungsz == 0) && (anzanfuehrungss == 0)) ? true : false;
Console.WriteLine(z);
return 0;
}
static int Menu()
{
// Benutzerwahl
int eingabe;
// Menu wiederholen bis zur richtigen Eingabe
while (true)
{
// das eigentliche Menu
Console.WriteLine("\n\n--- Menu:\n");
Console.WriteLine("1 -> Programm schreiben");
Console.WriteLine("2 -> Syntax prüfen");
Console.WriteLine("3 -> Programm beenden");
// Eingabe der Benutzerwahl
Console.Write("Ihre Eingabe:");
eingabe = Convert.ToInt32(Console.ReadLine());
// Rücksprung im Fall einer zulässigen Wahl
if (eingabe >= 1 && eingabe <= 3)
return eingabe;
// Benutzerwahl nicht zulässig -- Meldung
Console.WriteLine("\nfehlerhafte Eingabe -- bitte wiederholen!\n");
}
}
static void Main(string[] args)
{
// Menueingabe
int eingabe;
int anzrundek = 0;
int anzeckigek = 0;
int anzgeschweiftek = 0;
int anzanfuehrungsz = 0;
int anzanfuehrungss = 0;
// Begrüßung
Console.WriteLine("\n\n*** CheckC ***\n\n");
string x = String.Empty;
// Auswahl der Bearbeitungsmöglichkeiten
while ((eingabe = Menu()) != 3)
{
switch (eingabe)
{
case 1:
x = Programmschreiben();
break;
case 2:
Syntaxprüfen(x, ref anzrundek, ref anzeckigek, ref anzgeschweiftek, ref anzanfuehrungsz, ref anzanfuehrungss);
break;
}
}
// Verabschiedung
Console.WriteLine("\n\n*** ENDE ***\n\n");
Console.ReadKey();
}
}
wäre es eine möglichkeit den fall fürs kommentar in jeden einzelnen fall für ( ) { } einzufügen? z.b.
case "(":
anzrundek++;
try
{
for (int k = i+1; k < code.Length; k++)
{
arr[k] = Convert.ToString(code[k]);
if (arr[k] == "/" && arr[k + 1] == "/")
{
}
if ((arr[k] == "{") || (arr[k] == "}") || (arr[k] == "]"))
{
throw new Exception();
}
}
}
catch(Exception)
{
Console.WriteLine("Fehler1:Falsche Verschachtelung nach (!");
}
break;