我正在处理我的部分代码,假设正确输出错误消息。
请参阅下面的截图,我正在使用bash
./ myProgram< input3a.in | diff -a -y output3a.out -
左手边是我想要的。
由于某种原因,额外的" |"在char数组之前打印' line'打印出来。我怀疑可能是char阵列' line'不是空终止。但它是由cin.getline()初始化的;应该null终止char数组。
在这里,我尝试打印''我的主程序中的数组,它离开了|在它之前签署。
我的问题是。为什么std :: cout会显示这种行为?
由于
EDIT,
以下是我的问题代码。谢谢你再看看。
#include "char_stack.h"
#include <iostream>
void printErrorLine(int errorSpot, int c_count, char line[]){
//Print the first line of error message char by char, at the
//same time replace char with \t or space
for(int x = 0; x <= errorSpot; x++){
std::cout << line[x];
if(line[x] != '\t'){
line[x] = ' ';
}
}
std::cout << std::endl;
//Print out the second line, if the first line does not have a
//errorSpot, then dont print it
if(errorSpot != c_count){
std::cout << line << std::endl;
}
}
char findCounterPart(char bracket){
//pass.
}
int main(int argc, char * argv[]){
char line[250]; // 250 because spec sheet detailed max 250 char per line.
char c;
int l_count = 0; // number of lines already read
int c_count; // character count in a line
char_stack S;
bool isError;
while(!std::cin.peek() == std::cin.eof()){
std::cin.getline(line, 250);
c_count = std::cin.gcount();
l_count +=1;
//std::cout<< c_count << std::endl << std::endl;
//loop through the line
for(int x = 0; x < c_count; x++){
c = line[x];
//std::cout << c << " stack size is " << S.size() << std::endl;
if (c == '(' ||
c == '{' ||
c == '['){
S.push(c);
}
else if(c == ')' ||
c == '}' ||
c == ']'){
if(S.empty()){
std::cout << "Error on line " << l_count << ": Too many " << c << std::endl;
isError = true;
}
else{
char l = S.pop();
if(l != findCounterPart(c)){
std::cout << "Error on line " << l_count << ": Read " << c <<
", expected " << findCounterPart(l) << std::endl;
isError = true;
}
}
}
if (isError){
printErrorLine(x, c_count ,line);
return 0;
}
}
}
if (!S.empty()){
c = S.pop();
std::cout << "Error on line " << l_count << ": Too many " << c << std::endl;
printErrorLine(c_count, c_count , line);
}
else{
std::cout <<"No Errors Found" << std::endl;
}
return 0;
}
答案 0 :(得分:0)
学习成为一名软件工程师就是将问题分解成易于管理的块,这里我们有几个做法。让我们稍微改一下你的问题:
当
diff
我的程序输出对包含上一次运行输出的文件时,显示意外字符。目前我认为这是因为std :: cout的一些奇怪的行为。
嗯,这可能是一个合理的假设,我们无法看到你的代码所以我们无法知道你是否在做任何特殊的事情。
但它必须是:std :: cout被使用,好吧,到处都是。它只是没有这种行为,除非你的代码故意在某处写|
。
我们可以采取一系列措施来解决这个问题:
cat
,less
或more
等命令查看输出,而不是diff
3也许是最明智的开始,因为文件已经就在那里,之后#2会给我们一个mk1eyeball检查。
我们发现:|
未出现在文件或输出中。它不是来自你的程序。
让我们创建几个.txt文件并区分它们:
osmith@WOTSIT MINGW64 ~
$ echo -e 'First line\nSecond line' >test1.txt
osmith@WOTSIT MINGW64 ~
$ echo -e 'First line\nFile two line 2' >test2.txt
osmith@WOTSIT MINGW64 ~
$ diff -a -y test1.txt test2.txt
First line First line
Second line | File two line 2
使用-y
开关时,在两列输出之间,diff
有一行特殊字符,表示已更改,插入或删除的行。