我正在努力让我的程序能够识别输入到令牌字符串的内容并将其与度量标准进行比较,以便我可以进行多次转换,例如千位,厘米等。我遇到的问题我现在不能让程序识别毫米。
另请注意,有一个将英语转换成猪拉丁语的功能,所以忽略一些猪拉丁变量
int i = 0;
int j = 0;
int command = 0, //Pig latin ints
count = 0;
double tokenNum;
char name[50];
char *tokens[10];
char *englishLength[] = {"feet"};
char *metricLength[] = {"meter", "milli", "centi", "deci", "deka", "hecto", "kilo"};
char sentence_ar[100], //Pig latin chars
*array_of_pointers_to_strings[50],
new_string1[50] = {'\0'},
new_string2[50] = {'\0'};
printf ("Enter conversion in the following format\n -- How many meters are in X feet --:\n ");
fflush (stdin);
gets(name);
printf ("Original name: %s\n", name);
tokens[0] = strtok (name, " ");
printf ("Token[0]: %s\n", tokens[0]);
i++;
while ((tokens[i] = strtok (NULL, " ")) != NULL)
{
printf ("Token[%d]: %s\n", i, tokens[i]);
i++;
}
tokenNum = atof (tokens[5]);
printf("%d\n", tokenNum);
while (j < 1)
{
if (strcmp(tokens[6],metricLength[0])==0);
{
// feet to meters
double result;
result = tokenNum * 0.3048;
j++;
printf("Feet to Meters %f\n", result);
// if you enter How many meters are in 5 feet, ANSWER: 1.524
}
// when token[6] = milli
if (strcmp(tokens[6],metricLength[1])==0)
{
//feet to millimeters
double result;
result = tokenNum * 304.8;
j++;
printf("Feet to Milli %f\n", result);
// if you enter How many milli are in 5 feet, ANSWER: 1524
}
}
答案 0 :(得分:2)
以下是您可以使用的一些观察结果(这更多是上述评论的汇编):
1.不要使用fflush(stdin)
。 fflush
is for output stream only。
2.不要使用gets
。 Its not safe。建议使用fgets
3.将绑定检查添加到您的阵列。在while ((tokens[i] = strtok (NULL, " ")) != NULL)
中,您应该检查i
的值,以便不超过tokens
分配的数组大小。
4.在语句if (strcmp(tokens[6],metricLength[0])==0);
中,分号使得这个条件导致空体。我认为添加分号不是为了摆脱它
5.根据您的输入要求,您正在检查错误的令牌。如果您的输入需要“VALUE ENGLISH_UNIT中有多少METRIC_UNIT”,那么您应该比较第三个标记,即tokens[2]
。如果验证输入也是个好主意。
6.将编译器上的警告加到max&amp;解决所有问题!这是一个很好的做法
希望这有帮助!