任务是:
命令行将仅包含以下字符:∙ 拉丁字母(大小)和数字、∙ 空格 (ASCII 32)、∙ 双引号 (ASCII 34)。
参数按顺序写入命令行。在每两个相邻参数之间插入一个或多个空格以将它们彼此分开。该参数可以完全用双引号括起来。如果参数内有空格,则必须用双引号括起来。参数本身没有双引号字符 - 它们只能围绕参数。所有参数都是非空的。
要解析的命令行位于输入文件的一行。其长度不超过 100 个字符。请注意,此命令行缺少可执行文件的名称。将需要的命令行参数输出到输出文件,每行一个参数。每个参数必须用方括号括起来。不需要输出特殊的空参数(命令行本身)。
以下是我的代码。似乎工作正常,但是当你输入多个空格时,输出是某种难以理解的混乱,我不明白是什么原因:
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main()
{
char c;
do
{
scanf("%c", &c);
switch (c) {
case '"':
printf("[");
scanf("%c", &c);
while (c != '"')
{
printf("%c", c);
scanf("%c", &c);
}
//printf("]\n");
case ' ':
if (c != '\n')
{
scanf("%c", &c);
}
default:
while (c != ' ' && c != '\n')
{
printf("[%c", c);
scanf("%c", &c);
}
printf("]\n");
getch();
}
} while ( c!= '\n');
return 0;
}

我会像这样重写您的解决方案(C# 代码)
考试
结果
我不了解“粥”,但我在算法中发现了几个错误:
在每个结束时
case你需要写break注释
//printf("]\n");取消注释,有用的行)case ' '我不明白你为什么会这样,你可以通过写跳过空格break。在
default循环前面,在循环[内打印字符,而不是每次迭代[%c。getch()我也不明白他为什么会在这里。完整修改代码:
程序结果:
您的任务说:“命令行将仅包含以下字符:∙ 拉丁字母(大小)和数字,∙ 空格(ASCII 32),∙ 双引号(ASCII 34)”。参数内的引号和空参数也被禁止。必须考虑这些限制。
一般来说,在我看来,这是一个更正确的选项(尽管它可能并不理想),因为。执行解析,考虑到输入字符串的语法中可能出现的错误: