Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 替换所有选项卡的代码,以及单个空格是否有超过1个空格?_C - Fatal编程技术网

C 替换所有选项卡的代码,以及单个空格是否有超过1个空格?

C 替换所有选项卡的代码,以及单个空格是否有超过1个空格?,c,C,这个问题在练习1.9中。我编写了以下代码: #include<stdio.h> main() { int c,i=0,n=0; while((c=getchar())!=EOF) { if(c!=' '||c!='\t') { i=0; putchar(c); } else if(c==' '||c=='\t') {

这个问题在练习1.9中。我编写了以下代码:

#include<stdio.h>
main()
{
    int c,i=0,n=0;
    while((c=getchar())!=EOF)
    {
         if(c!=' '||c!='\t')
         {
             i=0;
             putchar(c);
         }
         else if(c==' '||c=='\t')
         {
              i++
         }
         if((c+1)!=' '||(c+1)!='\t')
               n=i;
         if(n!=0)
        {
               c=' ';
               putchar(c);
        }
    }
}
但我无法获得所需的输出。我在ubuntu中使用gcc。当我输入类似hello\t\ta的内容作为输入时,我的输出为hello\\\\\ a,即制表符的编号替换为空格的编号,当我输入hello\\ u\\ a时,我的输出与输入相同


请帮助我,或者建议我一些新的方法来获得所需的输出。

问题是:您想检查下一个字符,但检查当前字符的值增加了一个。

问题是:您想检查下一个字符,但是您检查当前字符的值是否增加了1。

方法有点错误,这里有一个提示,将最后一个字符保持为状态,如果新输入的字符是空格,而最后一个字符是空格,则不输出,只需返回循环并等待下一个字符


如果当前字符不是空格,则输出并更新状态…

方法稍有错误,这里有一个提示,将最后一个字符保留为状态,如果新输入的字符是空格,最后一个字符是空格,则不输出,只需返回循环并等待下一个字符


如果当前字符不是空格,则输出并更新状态…

而不是为您提供完整的工作程序,我更愿意引导您走向正确的方向

首先,c+1并不意味着输入中的下一个字符。它只向c的值添加1,这将有效地将c转换为文本中的下一个字符。 例如,如果c是“a”,c+1表示“b”,这是整型中的下一个字符,如果c是“表中代码为32的单个空格”,c+1表示“!”表中有代码33

好吧,为了得到下一个角色,你需要阅读它!以同样的方式阅读第一个字符。实现这一点的最佳方法是始终保持前一个读取字符,并用当前读取的字符检查该字符

因此,您需要两个变量,例如c和pc。您读取字符并将其存储在c中。首先,pc是“\0”。如果读取的字符不是空格或制表符,则将其写入输出。如果是tab,则将其更改为空格。如果是空格,则检查前一个字符pc。如果不是空格,则打印c。在循环结束时,您应该将c的值存储到pc中,这意味着您正在pc中保留前一个字符


我想我告诉过你完整的解决方案了

与其给你完整的工作计划,我更愿意引导你走向正确的方向

首先,c+1并不意味着输入中的下一个字符。它只向c的值添加1,这将有效地将c转换为文本中的下一个字符。 例如,如果c是“a”,c+1表示“b”,这是整型中的下一个字符,如果c是“表中代码为32的单个空格”,c+1表示“!”表中有代码33

好吧,为了得到下一个角色,你需要阅读它!以同样的方式阅读第一个字符。实现这一点的最佳方法是始终保持前一个读取字符,并用当前读取的字符检查该字符

因此,您需要两个变量,例如c和pc。您读取字符并将其存储在c中。首先,pc是“\0”。如果读取的字符不是空格或制表符,则将其写入输出。如果是tab,则将其更改为空格。如果是空格,则检查前一个字符pc。如果不是空格,则打印c。在循环结束时,您应该将c的值存储到pc中,这意味着您正在pc中保留前一个字符



我想我告诉过你完整的解决方案了

看看你的第一个大括号“if”有点奇怪。这段代码没有编译:12:error:“else”没有前面的“if”c+1?你想用这句话暗示什么?很抱歉。那个额外的{错误地出现在那里,它不在真正的答案中。除此之外,还有任何错误。对那个额外的感到抱歉{我想知道有多少人知道k&r是什么。我当然不知道。看看你的第一个“如果”大括号有点奇怪。这段代码没有编译:12:error:“else”没有前面的“如果”c+1?你想用它暗示什么?很抱歉,那是额外的{错误地到了那里,它不在真正的答案中。除此之外,还有任何错误。对于那个额外的错误,我很抱歉{我想知道有多少人知道k&r是什么。我当然不知道。如何检查下一个字符的值?你是如何得到当前字符的?当前字符?通过while循环。while循环一直到下一个字符,直到它到达文件的结尾。Hilfe zur selbthilfe。你通过回答我的问题回答了你的问题。我想检查空格的结尾,这就是我使用c+1的原因。假设输入是friend/////u,然后到达第三个/u。我知道我的空格将结束,知道这一点,我可以用一个空格替换3个空格

通过将ithat的值3存储到n中。因此n不等于0,它应该打印单个空格,下一个字符不是空格,因此我变为0,然后打印。但不知何故,代码没有按预期运行。即使我在第一个块中输入n=0,如果它不起作用。如何检查下一个字符值?如何获得当前值字符?当前字符?通过while循环。while循环继续到下一个字符,直到它到达文件.Hilfe zur selbthilfe的末尾。您通过回答我的问题来回答您的问题。我想检查空格的结尾,这就是我使用c+1的原因。假设输入是friend/\u/\ u/\ u,则到达第三个/\uu,我知道我的空格将结束,知道了这一点,我可以通过将ithat的值3存储到n中,将3个空格替换为一个空格。因此n不等于0,它应该打印单个空格,下一个字符不是空格,因此我变为0,然后打印。但不知怎的,代码没有按预期运行。即使我在第一个块中放入n=0,如果它不起作用,我也算出了它也可以用一个变量来完成,但还是非常感谢您。@THEPARADOX在定义变量时从不节约。我一定会记住这一点。包括main{inti;fori=0,i>=0;i++printfTHANK YOU;}@THEPARADOX your's welcome。顺便说一句,如果你感到满意,你通常应该将其中一个答案标记为接受答案。请阅读以了解更多信息。我发现它也可以使用单个变量来完成,但仍然非常感谢您。@THEPARADOX在定义变量时从不节约。我一定会记住这一点。包括main{inti;fori=0,i>=0;i++printfTHANK YOU;}@THEPARADOX your's welcome。顺便说一句,如果你感到满意,你通常应该将其中一个答案标记为接受答案。请阅读更多信息。