该程序应该从.txt文件中读取一行文本,并仅打印回文单词(在单独的.txt文件中)。
逻辑和输入/输出都按预期工作,但是当我尝试在每个单词之后将输出与新行分开时会出现问题。以下是代码段:
while((c = fgetc(fin)) != EOF) {
if (isalpha(c)) {
word[i++] = tolower(c);
}
else {
word[i] = '\0';
printf("%s", word);
}
让我们说输入的句子是:加里骑自行车,现在迈克尔加入了他。当每个单词后面没有换行时,输出就是预期的(仅限字母)。但是当我使用
时while((c = fgetc(fin)) != EOF) {
if (isalpha(c)) {
word[i++] = tolower(c);
}
else {
word[i] = '\0';
printf("%s\n", word); // new line after every word
}
空行开始出现
为什么" bike"之间有一个空白行?和"和"?每当序列中有多个非字母字符时,通常会发生这种情况。如果将字符分配给" word"是不正确的,为什么" printf("%s", word)
"工作
感谢您的反馈。
注意:我是计算机科学专业的一年级学生。
答案 0 :(得分:2)
查看输入
bike, and
此处,
将导致第一次检查失败。因此它落到else
子句并打印一个新行。
这是因为i
将0
而word[i] = '\0';
将导致空字符串。现在您正在打印"%s\n"
该行将按预期显示为空白。
答案 1 :(得分:2)
改变这个:
else
{
word[i] = '\0';
printf("%s\n", word);
}
对此:
else if (i > 0)
{
word[i] = '\0';
printf("%s\n", word);
i = 0;
}
为了跳过2个或更多连续非字母字符的情况。
答案 2 :(得分:2)
您的程序会将每个非字母字符视为单词分隔符。如果你的输入字符串中有几个后续的分隔符,你的程序(如所写的那样)将假设有"空的"他们之间的零长度的话。这些"空"单词在输出中显示为额外的空行(当您使用\n
跟随每个单词时)。
这正是当您的程序在输入字符串中发现,
序列时发生的情况(即逗号后跟空格)。 ,
和个字符都是非字母字符。它们都是分隔符,这意味着您的程序实际上将其视为
<comma><empty word><space>
。这个空单词是输出中的额外空白行。
如果您修改输入字符串以包含,,,,,
序列,您将看到每个&#34;空字的额外空行&#34;这些逗号之间。
这些空行仅可见,因为您在每次输出后添加了\n
字符。如果删除\n
,程序仍会找到并打印#34;空单词&#34;,但它们将是&#34;隐藏&#34; (因为它们的长度为零)。或者,您可以简单地从输出中过滤掉零长度的单词。
如果不希望您的程序以这种方式运行,则必须重写代码,记住分隔符可以成组。在开始累积下一个单词之前,您必须跳过整个连续组。或者,您可以从输出中过滤掉零长度的单词。