为什么我的功能在使用 goto 时给我一个 "expected primary-expression before '}' token"?
Why is my functioning giving me a "expected primary-expression before '}' token" while using a goto?
我的函数在使用 goto 时给了我 "expected primary-expression before '}' token",我不知道为什么。
这段代码在我将其放入函数之前在 main 中按原样工作。
当我用 'break' 替换 'goto' 时它起作用了,但我需要知道这是为什么。
void fileInputLoop(ifstream& inputFile){
do{
cout << "Enter data file name: ";
getline(cin, fileName);
previousFileName = fileName;
// The user will press enter to exit data input
if(fileName == ""){
// If no file name is entered, exit this input loop
goto skip_data_input_loop;
}else{
// Check to see if input is an existing file
inputFile.open(fileName);
if(!inputFile.is_open()){
cout << "File is not available." << endl;
}else{
// FILE IS OPEN, DO SOMETHING WITH IT
ReadData(inputFile);
inputFile.close();
}
}
// If a second++ file is read in, the previous file will be set accordingly
// This is to track if a duplicate is from the same file or a new file
previousFileName = fileName;
}while(true);
skip_data_input_loop:
}
问题是标签是用来标记语句的。换句话说,你不能没有后面没有声明的标签。
请注意我的评论,您可以通过在标签后添加一个空的 "null" 语句来解决此问题:
skip_data_input_loop: /* Empty statement using the semicolon */ ;
goto语句格式如下语法
goto label;
... .. ...
... .. ...
... .. ...
label:
statement;
... .. ...
在 main 的情况下,你会在标签下面有一个 return 语句,对于这个函数,函数末尾的标签紧跟在函数的结尾 } 之后,它们按照语法 a标签后应有语句或表达式。
您可以使用打印语句或 Empty return
示例:
}while(true);
skip_data_input_loop:
return;
}
我的函数在使用 goto 时给了我 "expected primary-expression before '}' token",我不知道为什么。
这段代码在我将其放入函数之前在 main 中按原样工作。
当我用 'break' 替换 'goto' 时它起作用了,但我需要知道这是为什么。
void fileInputLoop(ifstream& inputFile){
do{
cout << "Enter data file name: ";
getline(cin, fileName);
previousFileName = fileName;
// The user will press enter to exit data input
if(fileName == ""){
// If no file name is entered, exit this input loop
goto skip_data_input_loop;
}else{
// Check to see if input is an existing file
inputFile.open(fileName);
if(!inputFile.is_open()){
cout << "File is not available." << endl;
}else{
// FILE IS OPEN, DO SOMETHING WITH IT
ReadData(inputFile);
inputFile.close();
}
}
// If a second++ file is read in, the previous file will be set accordingly
// This is to track if a duplicate is from the same file or a new file
previousFileName = fileName;
}while(true);
skip_data_input_loop:
}
问题是标签是用来标记语句的。换句话说,你不能没有后面没有声明的标签。
请注意我的评论,您可以通过在标签后添加一个空的 "null" 语句来解决此问题:
skip_data_input_loop: /* Empty statement using the semicolon */ ;
goto语句格式如下语法
goto label;
... .. ...
... .. ...
... .. ...
label:
statement;
... .. ...
在 main 的情况下,你会在标签下面有一个 return 语句,对于这个函数,函数末尾的标签紧跟在函数的结尾 } 之后,它们按照语法 a标签后应有语句或表达式。
您可以使用打印语句或 Empty return
示例:
}while(true);
skip_data_input_loop:
return;
}