【发布时间】:2019-08-08 12:25:27
【问题描述】:
我是编码新手,这是我的第一个大任务。 我必须设计一个程序,从标准输入接收输入并在被询问时输出特定数据(通过“报告”命令)
int main()
{
const char Comando[6][7]={"addrel","addent","delrel","delent","report","end"};
const char spazio[2]= " ";
const char newline[3] = "\n";
const char quote[2]= "\"";
char sample[100];
char *temp;
char *comandoIN;
char *argomento1;
char *dest;
char *rel;
RelHead = NULL;
init_array();
char *str = fgets(sample, 100, stdin);
/*I am not going to use str, but apparently I have to do this , otherwise it won't compile*/
for(;;)
{
if (strncmp (sample, Comando[5], 3)==0)
{
return 0; //check if input is end, if so terminate
}
else
{
//parse by eliminating \n character and quotes containing arguments
temp = strtok(sample, newline);
comandoIN = strtok(temp, spazio);
argomento1 = strtok(NULL, quote);
temp = strtok(NULL, quote);
dest = strtok(NULL, quote);
temp = strtok(NULL, quote);
rel = strtok(NULL, quote);
if (strncmp(Comando[0], comandoIN, 7)==0)
{
addrel(argomento1, dest, rel);
}
else if (strncmp(Comando[1], comandoIN, 7)==0)
{
addent(argomento1);
}
else if (strncmp(Comando[2], comandoIN, 7)==0)
{
delrel(argomento1, dest, rel);
}
else if (strncmp(Comando[3], comandoIN, 7)==0)
{
delent(argomento1);
}
else if (strncmp(Comando[4], comandoIN, 7)==0)
{
report();
}
}
char *str = fgets(sample, 69, stdin);
}
return 0;
}
当我尝试使用教授给出的一些标准化输入来测试程序时,程序似乎在调用“report”后没有立即输出,而是继续读取并稍后输出。
例如,这个输入:
addent "Elijah_Baley"
addent "Bentley_Baley"
addent "Jesse_Baley"
addent "Gladia_Delmarre"
addent "Han_Fastolfe"
addent "Vasilia_Aliena"
addent "R_Daneel_Olivaw"
addent "R_Giskard_Reventlov"
addent "Kelden_Amadiro"
addent "Santirix_Gremionis"
addent "Rikaine_Delmarre"
report
addent "Jothan_Leebig"
addent "The_Chairman"
addent "R_Jander_Panell"
addent "Hannis_Gruer"
addrel "Elijah_Baley" "Jesse_Baley" "loves"
report
addrel "Gladia_Delmarre" "Elijah_Baley" "loves"
addrel "Rikaine_Delmarre" "Jothan_Leebig" "is_killed_by"
addrel "Jesse_Baley" "Elijah_Baley" "loves"
report
addrel "R_Jander_Panell" "R_Giskard_Reventlov" "is_killed_by"
addrel "Santirix_Gremionis" "Gladia_Delmarre" "loves"
addrel "Gladia_Delmarre" "R_Jander_Panell" "loves"
addrel "Elijah_Baley" "Kelden_Amadiro" "is_killed_by"
addrel "Gladia_Delmarre" "Elijah_Baley" "is_killed_by"
report
addrel "Elijah_Baley" "Gladia_Delmarre" "loves"
addrel "R_Jander_Panell" "Kelden_Amadiro" "is_killed_by"
addrel "Vasilia_Aliena" "Han_Fastolfe" "loves"
report
addrel "Jesse_Baley" "Jothan_Leebig" "is_killed_by"
addrel "Bentley_Baley" "Elijah_Baley" "loves"
report
addrel "Rikaine_Delmarre" "Gladia_Delmarre" "loves"
addrel "R_Jander_Panell" "Kelden_Amadiro" "is_killed_by"
addrel "Santirix_Gremionis" "Vasilia_Aliena" "loves"
addrel "Vasilia_Aliena" "Kelden_Amadiro" "loves"
addrel "Kelden_Amadiro" "R_Daneel_Olivaw" "loves"
report
addrel "Santirix_Gremionis" "Elijah_Baley" "is_killed_by"
addrel "Han_Fastolfe" "Vasilia_Aliena" "loves"
report
addrel "The_Chairman" "Jothan_Leebig" "is_killed_by"
addrel "Hannis_Gruer" "Gladia_Delmarre" "loves"
addrel "R_Daneel_Olivaw" "Vasilia_Aliena" "is_killed_by"
addrel "The_Chairman" "Gladia_Delmarre" "loves"
addrel "R_Giskard_Reventlov" "Gladia_Delmarre" "loves"
addrel "Vasilia_Aliena" "R_Giskard_Reventlov" "loves"
report
addrel "Vasilia_Aliena" "Jesse_Baley" "is_killed_by"
addrel "Kelden_Amadiro" "Han_Fastolfe" "is_killed_by"
addrel "Santirix_Gremionis" "R_Daneel_Olivaw" "loves"
report
addrel "The_Chairman" "Kelden_Amadiro" "is_killed_by"
report
end
输出这个:
addent "Elijah_Baley"
addent "Bentley_Baley"
addent "Jesse_Baley"
addent "Gladia_Delmarre"
addent "Han_Fastolfe"
addent "Vasilia_Aliena"
addent "R_Daneel_Olivaw"
addent "R_Giskard_Reventlov"
addent "Kelden_Amadiro"
addent "Santirix_Gremionis"
addent "Rikaine_Delmarre"
report
addent "Jothan_Leebig"
addent "The_Chairman"
addent "R_Jander_Panell"
addent "Hannis_Gruer"
addrel "Elijah_Baley" "Jesse_Baley" "loves"
report
addrel "Gladia_Delmarre" "Elijah_Baley" "loves"
addrel "Rikaine_Delmarre" "Jothan_Leebig" "is_killed_by"
addrel "Jesse_Baley" "Elijah_Baley" "loves"
report
addrel "R_Jander_Panell" "R_Giskard_Reventlov" "is_killed_by"
addrel "Santirix_Gremionis" "Gladia_Delmarre" "loves"
addrel "Gladia_Delmarre" "R_Jander_Panell" "loves"
addrel "Elijah_Baley" "Kelden_Amadiro" "is_killed_by"
addrel "Gladia_Delmarre" "Elijah_Baley" "is_killed_by"
report
addrel "Elijah_Baley" "Gladia_Delmarre" "loves"
addrel "R_Jander_Panell" "Kelden_Amadiro" "is_killed_by"
addrel "Vasilia_Aliena" "Han_Fastolfe" "loves"
report
addrel "Jesse_Baley" "Jothan_Leebig" "is_killed_by"
addrel "Bentley_Baley" "Elijah_Baley" "loves"
report
addrel "Rikaine_Delmarre" "Gladia_Delmarre" "loves"
addrel "R_Jander_Panell" "Kelden_Amadiro" "is_killed_by"
addrel "Santirix_Gremionis" "Vasilia_Aliena" "loves"
addrel "Vasilia_Aliena" "Kelden_Amadiro" "loves"
addrel "Kelden_Amadiro" "R_Daneel_Olivaw" "loves"
report
addrel "Santirix_Gremionis" "Elijah_Baley" "is_killed_by"
addrel "Han_Fastolfe" "Vasilia_Aliena" "loves"
report
addrel "The_Chairman" "Jothan_Leebig" "is_killed_by"
addrel "Hannis_Gruer" "Gladia_Delmarre" "loves"
addrel "R_Daneel_Olivaw" "Vasilia_Aliena" "is_killed_by"
addrel "The_Chairman" "Gladia_Delmarre" "loves"
addrel "R_Giskard_Reventlov" "Gladia_Delmarre" "loves"
addrel "Vasilia_Aliena" "R_Giskard_Reventlov" "loves"
report
addrel "Vasilia_Aliena" "Jesse_Baley" "is_killed_by"
addrel "Kelden_Amadiro" "Han_Fastolfe" "is_killed_by"
addrel "Santirix_Gremionis" "R_Daneel_Olivaw" "loves"
report
addrel "The_Chairman" "Kelden_Amadiro" "is_killed_by"
renone //Starts outputting here, between "re" and "port", 9 lines below
"loves" "Jesse_Baley" 1;
"is_killed_by" "Jothan_Leebig" 1; "loves" "Elijah_Baley" 2;
"is_killed_by" "Jothan_Leebig" 1; "loves" "Elijah_Baley" 2;
"is_killed_by" "Kelden_Amadiro" 2; "loves" "Elijah_Baley" 2;
"is_killed_by" "Kelden_Amadiro" "Jothan_Leebig" 2; "loves" "Elijah_Baley" 3;
"is_killed_by" "Kelden_Amadiro" "Jothan_Leebig" 2; "loves" "Elijah_Baley" 3;
"is_killed_by" "Kelden_Amadiro" "Jothan_Leebig" 2; "loves" "Elijah_Baley" 3;
"is_killed_by" "Jothan_Leebig" 3; "loves" "Gladia_Delmarre" 6;
"is_killed_by" "Jothan_Leebig" 3; "loves" "Gladia_Delmarre" 6;
port
end
"is_killed_by" "Jothan_Leebig" 3; "loves" "Gladia_Delmarre" 6;
所以我的理解是它在完成阅读后输出,这不是预期的行为
【问题讨论】:
-
乍一看,您的“输出”似乎与您的“输入”相同。这是一个复制粘贴错误,还是这实际上是程序输出的内容?创建一个较小的示例,显示实际输出并显示您的预期输出可能会有所帮助。可能还需要显示
report()的主体和至少一个其他函数,例如addent()。 -
@DaveCosta 似乎输出在底部附近出错,插入了额外的文本块。
//Starts outputting here, between "re" and "port", 9 lines below -
您没有显示任何生成输出的代码。请创建一个minimal, complete and verifiable example。
-
旁白:惯用的循环控制是
while(fgets(sample, sizeof sample, stdin) != NULL) { ... }并删除for(;;) -
调用“report”后没有“输出”。大概是
report()输出?您尚未提供生成该输出的代码。您是否有机会使用 Eclipse?如果是这样,我赌这个问题:stackoverflow.com/questions/22877966/…
标签: c