[英]C - separating strings in the input stream
我的程序应该能够创建新结构并将其存储在数组中,但是用于存储和显示命令的姿势却很困难。
我不太清楚如何检查是否有多个字符串(“ set”“ varname”“ varcontents”)还是只有“ set”
char command[2][5] = { "set", "clear"};
printf("prompt> ");
scanf("%s",inputString);
if(strncmp(inputString,command[0],5) == 0 )
{
//code to create new struct, display structs etc...
}
else if(strncmp(inputString,command[1],5) == 0 )
{
//code to clear struct
}
现在,仅当用户输入“ set”时,if循环才会通过。 我可能可以对前几个字母进行比较,然后进行完整比较并减去前几个字符以生成新结构的名称,但这似乎太复杂了,必须有一个更简单的解决方案。
任何帮助表示赞赏!
您可以将句子拆分成单词数组,然后可以比较这些单词并运行您的功能。尝试一下,如果您愿意,我可以发布代码。
您的代码中有一些问题。 首先,scanf不会读取“ set variablename variablevalue”,因为它会跳过空格。 无论如何,它并不安全,因为它很容易导致缓冲区溢出-特别是初学者,应该使用fgets() 。 但是主要问题在其他地方-考虑以下片段:
scanf("%s", inputString);
如果输入:“ set xyz 12”会发生什么? scanf只会读取“设置”,而其他输入将被忽略。 因此,没有必要检查其他参数“ xyz”和“ 12”。 也许您想使用类似
scanf("%s %s %s", inputString1, inputString2, inputString3);
但是我建议不要这样做,而应该使用fgets()。 除此之外,您只需要简单的指针算法就可以跳过已经处理过的字符。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main (){
char* command[] = { "set", "clear"};
char input[256], varName[256], varContents[256];
char* pointer = input;
int i = 0;
printf("prompt>");
fgets(input, 255, stdin);
if(strncmp(pointer, command[0], strlen(command[0])) == 0 ){
pointer += strlen(command[0]) + 1;
while(*pointer != ' ' && *pointer != '\n'){
varName[i] = *pointer;
pointer++;
i++;
}
if(*pointer == '\n'){ printf("Not enough arguments"); return 1; }
varName[i] = '\0';
pointer++;
i = 0;
while(*pointer != ' ' && *pointer != '\n'){
varContents[i] = *pointer;
pointer++;
i++;
}
varContents[i] = '\0';
//code to create new struct, display structs etc...
printf("Set VarName: %s VarContents: %s\n", varName, varContents);
}else if(strncmp(pointer, command[1], strlen(command[1])) == 0 ){
//code to clear struct
}
return 0;
}
您只读取一个字符串,应该使用两个scanf读取两个字符串
char arg0[30], arg1[30];
while (scanf("%s %s", arg0, arg1) < 2);
直到输入两个字符串为止,它都会读取。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.