Issue related to a console application in C#/NET - c#

I have the following code in a C# console application:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello...");
}
}
When I run this application, the command prompt appears and suddenly disappear, but I have seen at my friend's house when I run the application, the command prompt asks to Press any key to Continue. When I press any key after then the application terminates.., but in my PC it doesn't work without writing Consol.ReadLine().
Is there a setting to get the user to the Press Any Key to Continue line?

Sadly no, but if you Debug->Start Without Debugging Ctrl+F5 it will make that effect.
Clearly you could add
Console.Write("\nPress Any Key to Continue");
Console.Readkey();
at the end of your program.
If you want to be (nearly) sure that your code will always show that prompt:
AppDomain.CurrentDomain.ProcessExit += (sender, e) =>
{
Console.Write("\nPress Any Key to Continue");
Console.ReadKey();
};
Put these lines at the beginning of your Main() method.
But I think this is a little overboard :-) It installs an exit handler that will ask for a key on exit.
Now, if you want to really really go overboard and show, you can go up to eleven:
if (Debugger.IsAttached)
{
AppDomain.CurrentDomain.ProcessExit += (sender, e) =>
{
Console.Write("\nPress Any Key to Continue");
Console.ReadKey();
};
}
This will ask for the key only if the debugger is attached (even these lines have to be put at the beginning of the Main() method. They replace the other versions). With Start Without Debugging the debugger isn't attached, so Visual Studio will show its prompt instead of yours.
(Instead of using the AppDomain.CurrentDomain.ProcessExit, you could have protected the whole Main() with a try...finally block, and in the finally put the Console.*, but that wasn't funny :-) )

Disappearing is the correct behaviour. If you want it to appear this way just add
Console.ReadKey(); Of course you can add some message before ("Press any key...") etc.

Related

Only part of a program executing

I'm following this tutorial https://mva.microsoft.com/en-us/training-courses/c-fundamentals-for-absolute-beginners-16169?l=83b9cRQIC_9706218949
and I can't get the program working although I have copied the exact code as in the tutorial.
I have Ubuntu 16.04 so I'm using Visual Studio Code. And I have .NET SDK version 2.1.403.
Here's the code for my program:
using System;
namespace Decision
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Miina's Big Giveaway");
Console.Write("Choose a door: 1, 2 or 3 ");
string userValue = Console.ReadLine();
if (userValue == "1")
{
string message = "You won a new car!";
Console.WriteLine(message);
}
Console.ReadLine();
}
}
}
The problem is that the program isn't writing the line "Choose a door...". Only when I stop the execution of the program, the line "Choose a door ..." appears in the debug terminal.
And if I try typing "1" while the program is still running nothing happens although it should go through the commands in the if statement. I can't figure out where's the problem.
Update on the debugging
When I'm debugging a light bulb appears next to the Console.Write -line. I'm not sure what that means.
Picture of the debugging result
Update
The program is working correctly when I run it through the terminal. So I guess I have to use the terminal with the Visual Studio Code. But it would be nice to use debugger, so if anyone knows how I could get it to work, let me know.
I suspect that Console.Write isn't being flushed (stdout on Linux is unbuffered, and is only flushed on a line ending).
Try Console.Out.Flush() as a work-around. It's not pretty, though.

C# Console Application Crashing

On Visual Studio, the C# Console application keeps on terminating when I try to run a program. I tested this by just writing Hello World, shown here:
(screenshot of what I wrote)
When I run it, the command prompt window appears for a second, then immediately closes. Is there a way to fix this?
When a console application runs it executes the code and exits, console applications do not have a message loop to keep them alive, it is the same as creating a batch file and double clicking it, the command window will open and then close when execution finishes. If you want then console window to hang around afterwards then you need to use Console.ReadLine(); which will wait for user input before closing (i.e. pressing Enter).
You code (which should be in your question) simply outputs some text to the console and then exits.
Suggested reading Creating a Console Application
class Program
{
static void Main (string[] args)
{
Console.WriteLine("Hello World");
Console.ReadLine();
}
}
The application is not crashing, it runs and then exits. If you want read the output after it's done you can use Console.ReadLine();
using System;
namespace Hello_World
{
class Program
{
static void Main (string[] args)
{
Console.WriteLine("Hello World");
Console.ReadKey();
}
}
}
The issue is not crashing really but that all the instructions are executed then the program exits. If you desire to pause, you could insert the statement:
Console.ReadKey();
which will wait for you to type a key to exit.

Keep console up to wait for response

I've got a console app. I prompt the user for input...my code does its thing and at the end tries to print the output back to the user.
Here's how I try to post back the output to the same console window so they can see the results:
Console.WriteLine( "Output: ");
Console.WriteLine(resultMessage);
Problem is my console closes before it shows the resultMessage.
You can use Console.ReadKey(true); it waits for any key press
When you're in VS, you can also press Ctrl and f5 to open your application outside of the debugger.
A consequence of doing so is that your window will stick around when your program is finished saying
Press any key to continue
One more Console.Read...
if (Debugger.IsAttached)
{
Console.Write("Press Enter to exit: ");
Console.ReadLine();
}
I think it will be better in case of using output redirection to file like
ConsoleApp.exe >results.txt
Use Console.ReadKey(); after the output is written to the console.

Console window keeps closing, even after I type in other statements

I am new to programming and as seems to be traditional I tried to create a "hello world" program in C#; however, as soon as I run the program it closes.
This is my code inside:
main()
console.writeline("hello world");
console.writeline("enter name");
console.writeline("where is the frikin console");
It's really annoying and I know it might be something simple for the additional users but how do I keep the window open.
Use Console.ReadLine(); or Console.ReadKey(); at the end of your program to wait for the return key or for any key.
You can build your program and run the exe from the command line, that will allow you to see the output.
If you want the program to remain running then adding the Read() statement is the traditional approach, as others have already said.
If you just want to see it in debugging and do not want or need the read statement then place a breakpoint at the end of the program during a debug session.
It's really quite simple.
After this line of code:
Console.WriteLine("where is the frikin console");
You need to add this:
Console.ReadLine();
That should work.
The reason the console closes is because you told it to write some stuff to the screen, after it has finished writing what you told it to write it simply closes itself all in the fraction of a second. if you add Console.ReadLine, the console will wait for you to input something before closing, like pressing a key on the keyboard.
Try adding Console.Read(). You need to pause execution somehow.
Console.WriteLine("hello world");
Console.WriteLine("enter name");
Console.WriteLine("where is the frikin console");
Console.ReadLine();
Console.ReadLine(); will close the console after you've hit (for example) enter.
Console.ReadKey(); will close the console after the next key-hit
You can read the console-contents with these methods,too
Console.WriteLine("hello world");
Console.WriteLine("enter name");
string name = Console.ReadLine();
Console.WriteLine("Your name is: " + name);
Console.ReadLine();
add below line at the end
Console.ReadLine();
You could use CTRL + F5 which will opens the command line and after execution of your code, it shows Press any key to continue.... This will be handy for you than adding few lines of code additionally.
Use
Console.ReadLine();
in the end of your code. You are having this problem because the program just write the message then it ends, that's why you can't see anything. By adding that line, you keep the program waiting something to be typed and you can read the message. After this, type something to end the program.
The window automatically closes after your program, you need to let it take some input, for example:
Add
Console.ReadLine();
Which takes a line of input (till "\n"). And your program will wait until somebody hit the return key (they can type anything and the program won't close: until you hit the return key. You can type in "hello world back what's up are you ok?" and nothing will happen.)
or
Console.ReadKey();
Which will take a character of input. This will make your program wait for the user to press any key and then closes.

Capture keystroke without focus in console

I know there is a question for Windows Forms but it doesn't work in the console, or at least I couldn't get it to work. I need to capture key presses even though the console doesn't have focus.
You can create a global keyboard hook in a console application, too.
Here's complete, working code:
https://learn.microsoft.com/en-us/archive/blogs/toub/low-level-keyboard-hook-in-c
You create a console application, but must add a reference to System.Windows.Forms for this to work. There's no reason a console app can't reference that dll.
I just created a console app using this code and verified that it gets each key pressed, whether or not the console app has the focus.
EDIT
The main thread will run Application.Run() until the application exits, e.g. via a call to Application.Exit(). The simplest way to do other work is to start a new Task to perform that work. Here's a modified version of Main() from the linked code that does this
public static void Main()
{
var doWork = Task.Run(() =>
{
for (int i = 0; i < 20; i++)
{
Console.WriteLine(i);
Thread.Sleep(1000);
}
Application.Exit(); // Quick exit for demonstration only.
});
_hookID = SetHook(_proc);
Application.Run();
UnhookWindowsHookEx(_hookID);
}
NOTE
Possibly provide a means to exit the Console app, e.g. when a special key combo is pressed depending on your specific needs. In the

Categories

Resources