在C中比较字符串与整数

时间:2018-01-23 15:15:35

标签: c arrays string char int

初学者在这里。 我正在尝试制作一个用户被问到谜语的游戏。 正确的答案是这样写的当前时间:hh:mm

该程序正常工作,直到用户输入许多不同的错误猜测(如随机字母)。 之后,即使答案是正确的,也会出错。

以下是代码:

PYTHONPATH='.' luigi --module pythonModuleContainingTheTasks --local-scheduler CustomWorkflow --mainInFile ./text.txt --mainOutFile ./procText.txt

我正在尝试我没有学习的东西,所以请原谅错误或错误的代码..提前致谢

1 个答案:

答案 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]; 类似,tempoora不是字符串 - 您没有为字符串终结符留出任何空间。 min不会正确转换它们。

您必须将atoiora都声明为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