如何使用 fgets()/sscanf() 从终端解析三个逗号分隔的字符串
how to parse three comma separated strings from terminal using fgets()/sscanf()
阅读后 Parsing a comma separated file using C using fscanf() 我取得了一些进步,但我仍然无法解析它。
来自控制台的输入最多为三个字符串,以逗号分隔,例如"String1,String2,String3" 或 "String1,String2" 或 "String1"
我可以在完成此工作后处理输入验证。我需要将此输入解析为三个单独的 char* 字符串。
到目前为止我有
char arg1[9] = "UNDEF";
char arg2[17] = "UNDEF";
char arg3[33] = "UNDEF";
char inputBuffer[100];
char* end = "END";
while(strcmp(arg1, end) != 0)
{
printf("ENTER INSTRUCTION:");
fgets(inputBuffer, sizeof(inputBuffer), stdin);
sscanf(inputBuffer, "%[^,\n]s,%[^,\n]s,%s" arg1,arg2,arg3);
printf("arg1: %s\narg2: %s\narg3: %s\n", arg1,arg2,arg3);
}
但是当我 运行 从终端输入 "test,test,test"
时,它输出
arg1: test
arg2: UNDEF
arg3: UNDEF
很明显我做错了什么,但我不知道是什么……这对我来说是新领域;我从来没有用 C 写过,自从我三年前的两个学期的 c++ 类 以来我就没有写过 C++。
干掉s
sscanf(inputBuffer, "%[^,\n],%[^,\n],%s", arg1,arg2,arg3);
[^,\n]
将扫描直到遇到 ,
并将扫描的值存储在您的 char array
.
中
PS: fgets()
带有换行符。
阅读后 Parsing a comma separated file using C using fscanf() 我取得了一些进步,但我仍然无法解析它。
来自控制台的输入最多为三个字符串,以逗号分隔,例如"String1,String2,String3" 或 "String1,String2" 或 "String1"
我可以在完成此工作后处理输入验证。我需要将此输入解析为三个单独的 char* 字符串。
到目前为止我有
char arg1[9] = "UNDEF";
char arg2[17] = "UNDEF";
char arg3[33] = "UNDEF";
char inputBuffer[100];
char* end = "END";
while(strcmp(arg1, end) != 0)
{
printf("ENTER INSTRUCTION:");
fgets(inputBuffer, sizeof(inputBuffer), stdin);
sscanf(inputBuffer, "%[^,\n]s,%[^,\n]s,%s" arg1,arg2,arg3);
printf("arg1: %s\narg2: %s\narg3: %s\n", arg1,arg2,arg3);
}
但是当我 运行 从终端输入 "test,test,test"
时,它输出
arg1: test
arg2: UNDEF
arg3: UNDEF
很明显我做错了什么,但我不知道是什么……这对我来说是新领域;我从来没有用 C 写过,自从我三年前的两个学期的 c++ 类 以来我就没有写过 C++。
干掉s
sscanf(inputBuffer, "%[^,\n],%[^,\n],%s", arg1,arg2,arg3);
[^,\n]
将扫描直到遇到 ,
并将扫描的值存储在您的 char array
.
PS: fgets()
带有换行符。