C printf(“%s\n”)输出与printf(“%s”)不同
这个程序应该从一个.txt文件中读取一行文本,并且只打印一个单独的.txt文件中的回文字 逻辑和输入/输出都按预期工作,但当我试图在每个单词后用新行分隔输出时,问题就出现了。以下是代码片段:C printf(“%s\n”)输出与printf(“%s”)不同,c,arrays,char,printf,newline,C,Arrays,Char,Printf,Newline,这个程序应该从一个.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", 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
}
开始出现空白行
为什么自行车和自行车之间有一条空行?这通常在序列中有超过1个非字母字符时发生。如果给word分配的字符不正确,为什么printf%s word可以工作
谢谢你的反馈
注:我是计算机科学的一年级学生。请看输入
bike, and
在这里,将导致第一次检查失败。因此,它落在else子句上,并打印一个新行
这是因为我将是0,单词[i]='\0';将导致空字符串。现在您正在打印%s\n该行将如预期的那样为空。查看输入
bike, and
在这里,将导致第一次检查失败。因此,它落在else子句上,并打印一个新行
这是因为我将是0,单词[i]='\0';将导致空字符串。现在您正在打印%s\n该行将如预期的那样为空。更改此选项:
else
{
word[i] = '\0';
printf("%s\n", word);
}
为此:
else if (i > 0)
{
word[i] = '\0';
printf("%s\n", word);
i = 0;
}
要跳过两个或更多连续非字母字符的大小写。请更改此选项:
else
{
word[i] = '\0';
printf("%s\n", word);
}
为此:
else if (i > 0)
{
word[i] = '\0';
printf("%s\n", word);
i = 0;
}
为了跳过2个或更多连续非字母字符的大小写。您的程序将每个非字母字符视为单词分隔符。如果您的输入字符串中有几个相应的分隔符,那么您编写的程序将假定它们之间有空的零长度字。当您在每个单词后面加上\n时,这些空词在输出中看起来像额外的空行 这正是当您的程序发现输入字符串中的序列时发生的情况,即逗号后跟空格。和字符都是非字母字符。它们都是分隔符,这意味着您的程序实际上将其视为分隔符。这个空单词是输出中额外的空行 如果修改输入字符串以包含一个,,,,序列,则会看到这些逗号之间的每个空单词都有一个额外的空行 只有在每次输出后添加了\n字符,这些空行才可见。如果删除该选项,\n程序仍将查找并打印空字,但由于它们的长度为零,因此它们将不可见。或者,您可以简单地从输出中过滤掉零长度的单词
如果你不想让你的程序以这种方式运行,你必须重写你的代码,记住分隔符可以分组出现。在开始积累下一个单词之前,必须跳过整个连续组。或者,您可以从输出中筛选出长度为零的单词。您的程序将每个单独的非字母字符视为单词分隔符。如果您的输入字符串中有几个相应的分隔符,那么您编写的程序将假定它们之间有空的零长度字。当您在每个单词后面加上\n时,这些空词在输出中看起来像额外的空行 这正是当您的程序发现输入字符串中的序列时发生的情况,即逗号后跟空格。和字符都是非字母字符。它们都是分隔符,这意味着您的程序实际上将其视为分隔符。这个空单词是输出中额外的空行 如果修改输入字符串以包含一个,,,,序列,则会看到这些逗号之间的每个空单词都有一个额外的空行 只有在每次输出后添加了\n字符,这些空行才可见。如果删除该选项,\n程序仍将查找并打印空字,但由于它们的长度为零,因此它们将不可见。或者,您可以简单地从输出中过滤掉零长度的单词
如果你不想让你的程序以这种方式运行,你必须重写你的代码,记住分隔符可以分组出现。在开始积累下一个单词之前,必须跳过整个连续组。或者,您可以从输出中过滤掉长度为零的单词。不清楚您在问什么。请贴一个。你有一个逗号和一个空格,它们都不是自行车和之间的字母,这就是为什么@barakmanos这在我看来像是一个答案。@iharob:我同意,但是当我写一个关于如何解决问题的答案时,有人已经提到了它,所以如果我现在把它添加到我的答案中,那么它看起来就像是我偷了它,尽管我的评论是事先发布的。不清楚你说了什么
我在问。请贴一个。你有一个逗号和一个空格,它们都不是自行车和之间的字母,这就是为什么@barakmanos这在我看来像是一个答案。@iharob:我同意,但当我写关于如何解决问题的答案时,有人已经提到了,因此,如果我现在将它添加到我的答案中,那么看起来就像是我偷了它,尽管我的评论是事先发布的。如果他需要空格,他应该向isspacechar c查询,因为isalpha“”返回0。他必须使用的函数可能是isprintchar c?哦,我明白了。谢谢你,这让我明白了错在哪里。@StefanRendevski很高兴你知道了你的错误。祝您的计算机科学之旅一切顺利。如果他需要空间,他应该向isspacechar c查询,因为isalpha“”返回0。他必须使用的函数可能是isprintchar c?哦,我明白了。谢谢你,这让我明白了错在哪里。@StefanRendevski很高兴你知道了你的错误。祝你在计算机科学之旅中一切顺利。