putchar()函数:模糊输出

时间:2016-12-31 11:58:59

标签: c arrays string putchar

这是一个简单的代码,试图从字符数组中清除空格,但输出不像我预期的那样" YasserMohamed"。

#include<stdio.h>

int main()
{
    char x[]="Yasser Mohamed";
    char ch;
    int i=0;
    while (x[i]!='\n')
    {
        if(x[i]!=' ')
            putchar(x[i]);
        i++;
    }
    system("pause");

    return 0 ;
}

7 个答案:

答案 0 :(得分:4)

'\n'中没有换行符x)。所以,条件是错误的,它应该是:

while (x[i]) /* until the null byte is found */
{
    if (x[i] != ' ')
        putchar(x[i]);
    i++;
}

答案 1 :(得分:1)

x中的字符串不包含您在循环中用作条件的换行符'\n'

使用while (x[i]!=0x00)以终止NUL字符(0x00)结束。

答案 2 :(得分:1)

这是因为你从未停止过写过的循环

while(x[i]!='\n')
    {
       //What You Want To Do.
           }

x[i]对于'\n'定义的任何x[i]都不是i!= 14

如果你把它写成while(x[i]),它会起作用。然后Loop会在你名字的末尾停止。 Going Beyond未定义,因为这不是您的可变内存区域。

或者您也可以写\0作为C中字符串的结尾是Null-Terminated #include<stdio.h> int main() { char x[]="Yasser Mohamed"; char ch; int i=0; while (x[i]) //As Null Character '\0' evaluates to false it would stop the loop { if(x[i]!=' ') putchar(x[i]); i++; } system("pause"); return 0 ; } ,其值为false,因此循环将停止。

正确的代码可能

from django.contrib import messages


def foo(request):
    # Some view where you want to throw error
    messages.add_message(request, messages.ERROR, 'Something Not Wrong')
    raise Http404()

答案 3 :(得分:0)

原始\n中没有x,因此您只需继续迭代未初始化的内存,直到遇到\n为止。相反,您应该迭代到字符串终止字符 - \0

while (x[i] != '\0') {
// Here --------^

答案 4 :(得分:0)

您也可以使用0代替'\ 0'(完全相同的值),如下所示:

for (int i = 0; x[i] != 0; i++) {
    if (x[i] != ' ')
        putchar(x[i]);
}

答案 5 :(得分:0)

在空终止字符串的末尾有一个空字符,而不是新行。

您应该将'\n'更改为'\0'或0(这是空字符的ASCII代码)。

 #include<stdio.h>


 int main()
 {

     char x[]="Yasser Mohamed";
     char ch;
     int i=0;
     while (x[i]!='\0')
     {
         if(x[i]!=' ')
             putchar(x[i]);
         i++;
     }
     system("pause");

     return 0 ;

 }

答案 6 :(得分:0)

更新的代码:

int main()
{
    char x[]="Yasser Mohamed";
    char ch;
    int i=0;
    while (x[i]!='\0')
    {
        if(x[i]!=' ') {
            printf("%c", x[i]); // replace putchar with printf
            fflush(stdout); // force character to appear
        }
        i++;
    }
    printf("\n"); // print newline so shell doesn't appear right here
    return 0 ;
}

字符串以空\0字符而不是换行符终止。

另外,你应该添加fflush语句(至少在linux上)以确保每个字符都被打印出来。

要使输出看起来不错,请在循环后添加换行符。

我用putchar替换了您的printf来电,看看在我运行您的程序时这是否会有所帮助。 putchar也可能会正常运作。

我删除了system(pause),因为它似乎没有帮助。我添加了换行符字符。