【发布时间】:2015-04-09 16:10:41
【问题描述】:
该程序的目标是创建一个函数,该函数读取单个字符串、用户键入的命令(最终用于与机器人一起使用的程序),其中包含一个未知的命令字(存储并打印为命令),以及未知数量的十进制参数(数量存储并打印为 num,参数将存储为数组 params 中的浮点值)。在用户输入中,命令和参数将用空格分隔。当我从字符串中提取十进制值时,我相信我的问题在于 atof 函数。我究竟做错了什么?感谢您的帮助!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void func(char *input, char *command, int *num, float *params);
int main()
{
char input[40]={};
char command[40]={};
int num;
float params[10];
printf("Please enter your command: ");
gets(input);
func(input,command,&num,params);
printf("\n\nInput: %s",input);
printf("\nCommand: %s",command);
printf("\n# of parameters: %d",num);
printf("\nParameters: %f\n\n",params);
return 0;
}
void func(char *input, char *command, int *num, float *params)
{
int i=0, k=0, j=0, l=0;
int n=0;
while(input[i]!=32)
{
command[i]=input[i];
i++;
}
for (k=0; k<40;k++)
{
if ((input[k]==32)&&(input[k-1]!=32))
{
n++;
}
}
*num=n;
while (j<n)
{
for (l=0;l<40;l++)
{
if((input[l-1]==32)&&(input[l]!=32))
{
params[j]=atof(input[l]);
j++;
}
}
}
}
一个示例输出屏幕:
Please enter your command: Move 10 -10
Input: Move 10 -10
Command: Move
# of parameters: 2
Parameters: 0.000000
理想情况下,参数输出应为输出“10 -10”。谢谢!
【问题讨论】:
-
gets()很危险,请改用fgets()。 -
您使用的是 C 还是 C++? C++ 解决方案是使用
std::istringstream,而不需要所有这些检查空格。 -
发布一些示例用法会有所帮助。
-
固定大小的数组不利于用户输入(除非您将读取限制在该大小)
-
C != C++,自然解决方案可能会有所不同。一般来说,您应该只标记您正在学习/编写/编译的语言。
标签: c windows codeblocks