2017-08-27 1 views
-2

Je suis assez nouveau pour C# et la programmation en général et j'ai passé des heures à essayer de réparer mon programme de base. J'ai 4 variables, j'ai demandé à l'utilisateur d'entrer 3 d'entre eux et en laisser un vide. Le programme fait des calculs sur le vide mais le problème est que je ne peux pas utiliser l'IsNullOrWhiteSpace pour ints.Existe-t-il une version de string.IsNullOrWhiteSpace pour les entiers?

Console.WriteLine("ilk aracın hızını giriniz"); 
int v1 = Convert.ToInt32(Console.ReadLine()); 

Console.WriteLine("ikinci aracın hızını giriniz"); 
int v2 = Convert.ToInt32(Console.ReadLine()); 

Console.WriteLine("yolun uzunluğunu giriniz"); 
int x = Convert.ToInt32(Console.ReadLine()); 

Console.WriteLine("karşılaşma sürelerini giriniz"); 
int t = Convert.ToInt32(Console.ReadLine()); 

if (string.IsNullOrWhiteSpace(v1)) 
{ 
    v1 = x/t - v2; 
    Console.WriteLine(v1); 
} 
else if (string.IsNullOrWhiteSpace(v2)) 
{ 
    v2 = x/t - v1; 
    Console.WriteLine(v2); 
} 
else if (string.IsNullOrWhiteSpace(t)) 
{ 
    t = x/(v1 + v2); 
    Console.WriteLine(t); 
} 
else if (string.IsNullOrWhiteSpace(x)) 
{ 
    x = (v1 + v2) * t; 
    Console.WriteLine(x); 
} 

` Y at-il un moyen de résoudre ce problème? Si c'est le cas, comment ?

+3

nullable int '' int –

+0

Essayez de double n;? bool isNumeric = Int.TryParse ("5", out n); – Sujatha

+0

Pourquoi ne pas faire 'IsNullOrWhitespace()' sur les chaînes sources plutôt que de les convertir immédiatement (et sans aucune validation) en 'int'? –

Répondre

5

Il n'y a pas d'équivalent de IsNullOrWhiteSpace pour int s car int représente toujours un nombre.

J'ai demandé à l'utilisateur d'entrer 3 d'entre eux et de laisser un vide.

Une approche est de garder l'entrée utilisateur comme string s jusqu'au moment où vous êtes prêt à utiliser sa forme entière:

Console.WriteLine("ilk aracın hızını giriniz"); 
string sv1 = Console.ReadLine(); 

Utilisez IsNullOrWhiteSpace sur sv1, sv2, sx, st, puis convertir dans l'instruction if:

if (string.IsNullOrWhiteSpace(s1)) { 
    v1 = Convert.ToInt32(sx)/Convert.ToInt32(st) - Convert.ToInt32(sv2); 
    Console.WriteLine(v1); 
} 

Notez que ceci est inte ger division, de sorte que tout résultat fractionnaire de diviser x par t est tronqué.

Une autre approche consiste à utiliser TryParse sur les quatre valeurs, et éviter IsNullOrWhitespace tout à fait:

Console.WriteLine("ilk aracın hızını giriniz"); 
bool missingV1 = !int.TryParse(Console.ReadLine(), out var v1); 
Console.WriteLine("ikinci aracın hızını giriniz"); 
bool missingV2 = !int.TryParse(Console.ReadLine(), out var v2); 
Console.WriteLine("yolun uzunluğunu giriniz"); 
bool missingX = !int.TryParse(Console.ReadLine(), out var x); 
Console.WriteLine("karşılaşma sürelerini giriniz"); 
bool missingT = !int.TryParse(Console.ReadLine(), out var t); 
if (missingV1) { 
    v1 = x/t - v2; 
    Console.WriteLine(v1); 
} else if (missingV2) { 
    ... 
} 
+0

... et int ne connaît aucun espace comme chaîne: o) –