Конвертиране на стринг към интегер в C#
Уважаеми колеги,
при изучаване на PB за C# или Python лично аз стигнах до заключението, че или наистина не съм внимавал на лекциите( понеже съм онлайн), или просто много малко е било застъпено конвертирането на стринг към интегер. Моята истина е (когато се разрових в упражненията и видеата), че обясненията са доста повърхностни, много малко на брой, бързи и за мен най-вече недостатъчно ясни. Тук пускам една задача, на пръв поглед наистина лесна за сглобяване. Реших я след около 4 часа стъкмяване, четене на примери от stackoverflow и яки псувни наум. Но минава на 100 % в Judge . На основата на подобна трудоемкост, не реших и една или две задачи от два изпита - C# и Python.
Предлагам за подробен коментар тази тема, понеже това може директно да прецака десетки кандидат-студенти като мен. И моля, който се включи да не ни препраща към сайтове, а да пуска всички обяснения тук.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Christmas_Gifts
{
class Program
{
static void Main(string[] args)
{
string command = Console.ReadLine();
int age = 0;
int toyPrice = 5;
int sweaterPrice = 15;
int count16 = 0;
int countAbove = 0;
int toysMoney = 0;
int sweaterMoney = 0;
while (command != "Christmas")
{
age = int.Parse(command[VS1] );
if (age <= 16)
{
count16++;
toysMoney += toyPrice;
}
else
{
countAbove++;
sweaterMoney += sweaterPrice;
}
command = Console.ReadLine();
if ("Christmas" == command)[VS2]
{
break;
}
}
Console.WriteLine($"Number of adults: {countAbove}");
Console.WriteLine($"Number of kids: {count16}");
Console.WriteLine($"Money for toys: {toysMoney}");
Console.WriteLine($"Money for sweaters: {sweaterMoney}");
}
}
}
1. [VS1] Защо е възможно стрингът да е в скобите, без да даде грешка ?
2. [VS2] Защо е направо задължително command да е равен на Console.ReadLine, а не просто на две кавички - (” ”) ?
3. И защо command е именно най-отдолу, а не някъде другаде из кода ?
Моля да коментирате кода !
Моля също да коментирате защо кодът в зелено е правилно да е точно така, а не например string command да е равен само на две кавички - (" "). Идеята на Вашия коментар е да затвърди моите и на десетки други колеги познания за тънкостите (бих казал пенизите) за конвертирането или дори може би "смесването" на стринг с интегер. И кога се налага това ? А и всъщност, как може да се заобиколи, ако може ?
И най-вече - весела Нова година !
За command в age = int.Parse(command);
int.Parse( ) \ тук в скобите се подава някакъв стринг, който ти очакваш със сигурност да е някакво число \ "33" "44" "69" и т.н. Ако command = "Christmas" и подадеш command на int.Parse(command) тогава ще гръмне, защото ти се опитваш да преобразуваш стринга Christmas в число, което е невъзможно. А когато подадеш да кажем "33" в int.Parse( ) този стринг "33" става на числото 33 (без скобичките) в случаят int
В случая, както виждате нямаме числа. Но няма и гръмване. Мисля, че ми гърмеше, когато аge от условието беше = на Console.ReadLine, a не на 0, както съм го изписал аз. И всъщност в цикъла става връзката между age и command.
Как така нямаме числа?!
16
20
46
12
8
20
49
Christmas
Това е примерен вход... Мисля, че има нещо генерално, което не сте разбрали. Всяко число, което съм показал, се подава като стринг от конзолата към int.Parse() и от string то става на int age...
Ааа, точно това не съм го бил доразбрал. Знаех , че всичко е стринг, но превръщането съм го пропуснал. Весела Нова година !