prosty problem z rzutowaniem string->int

0

a więc am taki kawałek kodu

                t = S.IndexOf(" ");
                w1[i] = System.Int32.Parse(S.Substring(0, t - 1));
                w2[i] = System.Int32.Parse(S.Substring(t + 1, t + 2));

wyskakujący błąd brzmi w visual studio: "Nieprawidłowy format ciągu wejściowego."

błąd występuje w pierwszym obrocie pętli for a więc i=0, sam błąd wyskakuje w linijce drugiej z tych zamieszczonych.
S jest stringiem czytanym z pliku i jego wartość to: "0 1 7.0 7.0 Infinity 1.0"

będe wdzięczny za szybko odpowiedź.

0

7.0 to nie int32, więc czemu się dziwisz? Infinity też wydaje się nieco zastanawiające, ale nie znam aż tak dobrze C# w tym kawałku.

poza tym to nie rzutowanie.

0

Nie można parsować na Inta z kropką.

Nie ma Infinity dla Inta w C#.

Ciekawostka:

... Co ciekawe - występuje Infinity dla typu double. Oto to pokazał reflector :>

public const double NegativeInfinity = (double) -1.0 / (double) 0.0;
public const double PositiveInfinity = (double) 1.0 / (double) 0.0;

WTF?

Tutaj więcej informacji:
http://steve.hollasch.net/cgindex/coding/ieeefloat.html
http://www.panopticoncentral.net/articles/916.aspx

0

obaj się mylicie. już błąd naprawiony...by prozaiczny...

   w2.Add(System.Int32.Parse(S.Substring(t + 1, t1 - t))); 

tak to powinno wyglądać. trzymajcie się

przecież ja tam do tej kropki nawet nie dochodziłem

0

obaj się mylicie. już błąd naprawiony...by prozaiczny...

   w2.Add(System.Int32.Parse(S.Substring(t + 1, t1 - t)));

Nie, nie mylimy się.

Nie wiem, czym jest u ciebie t1 - ale zapewne Substring zwrócił ci stringa bez kropki czy też liter (czego pewnie sam nie wiesz...?)

0

t1 jak i t wskazują na spacje. znaczy racja...konwersja na inta czegoś z "." ne wypali...ale nie to akurat powodowało błąd

ale dopiero któraś kolejna linijka...(po za tymi co zacytowaem) do tej kropki dochodziła...a błąd występował już wczesniej.

0

Jeśli liczby są podzielone stałym znakiem, to nie ma sensu się bawić i wycinać podciągi znakowe przy pomocy metody Substring. Podzielenie ciągu na poszczególne liczby i dopiero później konwersja wydaje mi się bardziej naturalna. Sam zobacz:

            string numbersFromFile = @"0 1 7.0 7.0 Infinity 1.0";
            List<Double> numbers = new List<Double>();
            CultureInfo culture = CultureInfo.CreateSpecificCulture("en-GB");
            foreach (string number in numbersFromFile.Split(new Char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries))
            {
                double value = 0.0;
                if (Double.TryParse(number, NumberStyles.Number, culture, out value))
                {
                    numbers.Add(value);
                }
            }
            numbers.ForEach(delegate(double value) { Console.WriteLine(value); });

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