Input/Output Console Problem 7
Write a program that enters 5 numbers (given in a single line, separated by a space), calculates and prints their sum.
Write a program that enters 5 numbers (given in a single line, separated by a space), calculates and prints their sum.
5 numbers (given in a single line, separated by a space)
Това ще рече, че числата се подават на един ред, така: 1 2 3 44 55
В момента, в който натиснеш ентър, минаваш на нов ред. Това, което трябва да направиш, е да вземеш целия ред като стринг и след това да го разделиш по спейс. Задачата ако не се лъжа беше направена със звезда, защото изисква работа с масиви.
Разгледай метода string.Split().
Ако числата са разделени със спейс - Разгледай това:
int[] intArray = Console.ReadLine().Split(new char[] { ' ' },
StringSplitOptions.RemoveEmptyEntries).Select(x => Convert.ToInt32(x)).ToArray();
За тази задача бих ти препоръчал да използаваш това:
int[] n = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
Където:
int[] - означава, че създаваш масив от интове. След това четеш данните от конзалата с Console.ReadLine().
.Split(' ') - разделя прочетените данни, с каквото му кажем. В нашият случай с ' '.
Тъй като Console.ReadLine() връща стринг ни е нужно да превърнем всеки елемент в инт за да влезе в масива и за това използваме - .Select(int.Parse).
И накрая добавяме всеки от получениете елементи към масива чрез .ToArray().
За да можем да го направим трябва след using System; да поставим using System.Linq;.
Ако не си работил с масиви може да изглежда малко плашещо, но се свиква много бързо и е много удобно в подобни случай.
1 2 3 4
Unhandled Exception: System.FormatException: Input string was not in a correct f
ormat.
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffe
r& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo in
fo)
at System.Int32.Parse(String s)
at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Pairs.Pairs.Main(String[] args) in c:\Users\b\Documents\Visual Studi
o 2013\Projects\ForumTestPrograms\Pairs\Pairs.cs:line 14
Press any key to continue . . .
LINE 14.
int[] intArray = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
Не съм сигурен, че разбирам коментара правилно, но предполагм, че имаш предвид, че при входни данни 1 2 3 4 ти дава грешка след като си използвал int[] intArray = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();.
Не знам, каква може да е причината.
Ето един тест на int[] intArray = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();, в който съм принтирал всички елементи от масива, всеки на нов ред:
Така работи ако има точно по 1 спейс между числата :)
Сложи 2 спейса примерно или почни със спейс ...
Иначе входа в judge системата е строго регламентиран ... но ако някога имаш този проблем прочети за StringSplitOptions