proč to vypisuje
5
5
??? nemelo by to naahodou vypsat true false ? pripadne ciselnou interpretaci...
static void Main()
{
int a, b, c;
a = 2;
b = 3;
Console.WriteLine(c=a+b);
Console.WriteLine(c+1=a+b);
Console.ReadKey();
}
Fórum › C / C++
C# - výpis výrazu proč ?
Pre porovnanie slúžia dve rovnítka:
static void Main()
{
int a, b, c;
a = 2;
b = 3;
Console.WriteLine(c==a+b);
Console.WriteLine(c+1==a+b);
Console.ReadKey();
}
Môžem sa spýtať v čom to inak prekladáš? Prípadne čo máš nastavené aby ti to preložilo výraz c+1=a+b? Ja mám M$VS 2010 prof. a nepodarilo sa mi to.Ja mam klasicky MX C# 2010 express dneska jsem ho nahodil. S touhle volovinou na nas vyrukoval ucitel ve skole. Ackoliv jeho vyklad nesleduji (tohle jsou pro mne trivialni a zname veci) ani on sam mi to nedovedl vysvetlit jinak nez ze to funguje. Proc to tak je ale nevim. Jinak, ani s C== to nevraci true/false nebo neco podobneho. Zajimal by me smysl nebo puvod toho chovani. Jeste vic mne zarazi ze c+1=a+b vypise 5 coz je v kontextu veci uplny nesmysl.
Takže, v prvom rade je premenná c neinicializovaná takže ani nevieš aká je tam hodnota. A za druhé, to že ti to nejaké čudo skompiluje aj s tým že "premennej" c+1 priradíš hodnotu znamená, že by si to niečo čo používaš ako kompilátor mal nahradiť za nejaký ozajstný kompilátor. Pre a == a, alebo b == a už mi to skompiluje a vypíše True, resp. False. Hento ti asi nikto nevysvetlí, pretože je to nejaké nedefinované chovanie. Alebo možno nie je a ja sa rád poučím. Každopádne, podľa môjho neodborného názoru je strata času sa nad tým vôbec zamýšľať :-D
To rainbof : Pokud učitel skutečně použil C#, tak je to buď chyták nebo jsi to špatně opsal, protože to v C# podle mě nemůže fungovat.
Jestli "MX C# 2010 express" znamená "MS Visual C# 2010 Express", tak to při spouštění programu po jeho neúspěšném buildu nabízí spuštění poslední úspěšně zbuildované verze (s možností dotaz dále nezobrazovat). A to je podle mě to, co se u tebe děje. Jiné vysvětlení pro to nemám a dál to řešit nebudu. A ten výklad poslouchej, znáš kulový.
nervak napsal:
Jestli "MX C# 2010 express" znamená "MS Visual C# 2010 Express", tak to při spouštění programu po jeho neúspěšném buildu nabízí spuštění poslední úspěšně zbuildované verze (s možností dotaz dále nezobrazovat). A to je podle mě to, co se u tebe děje. Jiné vysvětlení pro to nemám a dál to řešit nebudu. A ten výklad poslouchej, znáš kulový.
Je videt ze tvuj nick te zcela vystihuje. Bohužel nemohu s tebou souhlasit a to ani když jsi přesvědčen že vím kulový.
Tento program LZE přeložit a spustit a dělá přesně co jsem řekl. Neověřené diskuse na téma že je to blbost apod. si prosím nechte na večer do hospody.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
int a, b, c;
a = 2;
b = 3;
Console.WriteLine(c=a+b);
Console.ReadKey();
}
}
}
A MX opravdu znamenalo MS Visual Studio C# express. Doplním že bulid je 10.0.30319
To rainbof : Ano, tohle lze spustit, ale to co jsi napsal předtím nikoliv :)
Dobře, budeme slovíčkařit, řešit zda MX je MS tamto jsem psal narychlo při hodině. Uznavam že výraz c+1=a+b skutečně nejde je zvláštní že nyní ani c==a+ba nejde je špatně. Nevysvětluje to ale to co řeším primárně, a tím je proč Console.WriteLine(c=a+b); je 5 a proc to vubec funguje.
To rainbof : toto ti NEMUZE prelozit zadnej poradnej prekladac: c+1=a+b kam se to ma jako ukladat? co je za promennou c+1 ? i kdyby to byl pointer tak to nemuze projit bez dereference *(c+1) ... prirazeni hodnoty (coz je to =) MUSI vedet KAM prirazuje tu hodnotu...
c = a+b neni problem ani uvnitr console.write() .. v C-style jazycich i prirazeni vraci tu hodnotu co byla prirazena..
jde tedy udelat i c = a = a+b
ale to ze tu hodis na zacatku nejaky program, pak pouzivas neco uplne jinyho, a jeste tvrdis ze ten puvodni funguje... a jeste se navazet do lidi co ti jasne reknou ze to nemuze fungovat .. ne v C, C++ a ani C#
tohle jsou pro mne trivialni a zname veci
proč Console.WriteLine(c=a+b); je 5 a proc to vubec funguje
Ano, s takovými odborníky ztrácím nervy :) Nic osobního.Je videt ze tvuj nick te zcela vystihuje... jsi přesvědčen že vím kulový
Neověřené je jen tvoje tvrzení, že ten první program jde zkompilovat. Většina z nás je s C# dále než tvůj jeden den s MSVC# a hned pozná, že je to blbost.Neověřené diskuse na téma že je to blbost
Tak to by myslím stačilo. Problém je vyřešen a žádám, aby se k tomu už nikdo nevracel.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Pochopení výrazu — založil velurex
Umocnění výrazu — založil zdenek
Rozdílné hodnoty výrazu — založil velurex
Parsování logického výrazu — založil midnighter@centrum.cz
Vyhodnotenie prijateho vyrazu — založil Tom@sQo
Moderátoři diskuze