I'm writing a function like in C#:
public void CountNumber()
{
for(int i = 0; i < 40; i++) {
if(i > 20) {
goto out1;
}
Console.WriteLine("hello " + 1);
out1:
string hello = "";
}
}
This basically counts the number and if the i is greater than 20 it should not write to console.writeline. it should step over and hit "out1" but the "out1" needs to have a function in the end to compile. It needs to have "string hello = """ to compile. I don't need the "string hello = """. I just want it to do nothing and got the end of the loop. Is there a way to do this without the "string hello = """ that the out1: statement needs? Like:
public void CountNumber()
{
for(int i = 0; i < 40; i++) {
if(i > 20) {
goto out1;
}
Console.WriteLine("hello " + 1);
out1:
}
}
Thanks.
Though it is absolutely correct to say that there are better ways to solve this problem than to use goto, I note that no one has actually answered your question.
A label must label a statement . You want to go to a location that has no statement associated with it. You can either make an empty statement with a single semicolon, or an empty block.
out1:
;
}
or
out1:
{}
}
But like they say, don't go there in the first place if you can avoid it.
This loop could easily be written many other ways - you could just loop while i<=20
instead of i<40
(best), or move the Console.WriteLine
call into the if statement with the if inverted.
However, I'm assuming you're trying to work with a more elaborate scenario in your "real" case. If that's the case, instead of using goto
, just use continue
to skip the rest of the loop:
public void CountNumber()
{
for(int i = 0; i < 40; i++) {
if(i > 20) {
continue; // Skips the rest of this loop iteration
}
Console.WriteLine("hello " + 1);
}
}
Similarly, you can use break
to completely break out of the loop and not process more elements, if that's more appropriate in your real case.
Just invert your condition - also if...else
might be an alternative. I assume there is other code otherwise you can just change the for
loop itself to just count up to 20.
for(int i = 0; i < 40; i++)
{
if(i <= 20)
{
Console.WriteLine("hello " + 1);
}
//other code
}
There are some other goto-like statements, you should consider using:
continue
goes to the next iteration of the current loop. break
leaves the current loop return
exits the current method You should only consider goto
if none of the above does what you want. And in my experience that's very rarely the case.
It looks like you want to use continue
here.
You can use the continue
keyword for that:
public void CountNumber() {
for(int i = 0; i < 40; i++) {
if(i > 20) {
continue;
}
Console.WriteLine("hello " + 1);
}
}
However, consider using the if
instead:
public void CountNumber() {
for(int i = 0; i < 40; i++) {
if(i <= 20) {
Console.WriteLine("hello " + 1);
}
}
}
public void CountNumber()
{
for(int i = 0; i < 40; i++) {
if(i > 20) {
continue;
}
Console.WriteLine("hello " + 1);
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.