初学者在这里。 我正在尝试制作一个用户被问到谜语的游戏。 正确的答案是这样写的当前时间:hh:mm
该程序正常工作,直到用户输入许多不同的错误猜测(如随机字母)。 之后,即使答案是正确的,也会出错。
以下是代码:
PYTHONPATH='.' luigi --module pythonModuleContainingTheTasks --local-scheduler CustomWorkflow --mainInFile ./text.txt --mainOutFile ./procText.txt
我正在尝试我没有学习的东西,所以请原谅错误或错误的代码..提前致谢
答案 0 :(得分:2)
这里有一些问题:
scanf("%s",&tempo);
fflush(stdin);
//split array tempo into ora and min to separate h from mins
ora[0]=tempo[0];
ora[1]=tempo[1];
min[0]=tempo[3];
min[1]=tempo[4];
//cast guess form string to int
int oraint=atoi(ora); //creat integer hour from string
int minint=atoi(min); //integer mins
逐行:
scanf("%s",&tempo);
在将&
这样的数组表达式传递给tempo
时,不要使用scanf
运算符 - 在大多数情况下,数组表达式会自动转换为指针表达式。该行应该只是
scanf("%s", tempo);
其次,tempo
不足以存储字符串" hh:mm" - 记住一个字符串总是有一个终止0.你需要分配一个数组,该数组至少比你想要存储在其中的最长字符串大1个元素,所以tempo
应该声明为{{ 1}}。
第三,
char[6]
一般没有定义; "冲洗"输入流根本没有多大意义。确实,微软将其定义为在其特定实现中清除输入流,但总的来说,该行是无意义的。不要期望它在MSVC实施之外的任何地方工作。
接下来,
fflush(stdin);
与ora[0]=tempo[0];
ora[1]=tempo[1];
min[0]=tempo[3];
min[1]=tempo[4];
类似,tempo
和ora
不是字符串 - 您没有为字符串终结符留出任何空间。 min
不会正确转换它们。
您必须将atoi
和ora
都声明为min
,并确保将char[3]
和ora[2]
设置为0:
min[2]
当然,您可以使用以下内容来避免所有:
ora[0] = tempo[0];
ora[1] = tempo[1];
ora[2] = 0;
min[0] = tempo[3];
min[1] = tempo[4];
min[2] = 0;
最后,
int ora;
int min;
if ( scanf( "%d:%d", &ora, &min ) == 2 )
{
// read ora and min properly
}
else
{
// bad input or error
}
需要
while(ok=true);
或
while ( ok == true ); // == for comparison, = for assignment
while ( ok ); // my personal preference
将值<{1}}分配给ok=true
- 要执行比较,请使用true
。