putchar() 函数:不明确的输出

putchar() function: ambiguous output

这是一个简单的代码,试图从字符数组中清除空格,但输出并不像我预期的那样 "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 ;
}

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

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

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

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

你原来的x中没有\n,所以你就继续迭代未初始化的内存,直到碰巧遇到\n。相反,您应该迭代到字符串终止字符 - [=14=]:

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

你也可以用0代替'\0'(是完全一样的值),像这样:

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

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

你应该把'\n'改成'[=12=]'或者0(空字符的ASCII码)。

 #include<stdio.h>


 int main()
 {

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

     return 0 ;

 }

那是因为你写的循环从来没有停止过

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

但是 x[i] 没有 '\n' 任何 x[i] 定义。

如果你把它写成 i!= 14 就可以了。然后 Loop 会在你名字的末尾停止。 Going Beyond 未定义,因为这不是您的可变内存区域。

或者您也可以写成 while(x[i]),因为 C 中字符串的结尾是 Null 终止的 [=17=],其计算结果为 false,因此循环将停止。

正确的代码可能是

 #include<stdio.h>
 int main()
 {

     char x[]="Yasser Mohamed";
     char ch;
     int i=0;
     while (x[i])    //As Null Character '[=11=]' evaluates to false it would stop the loop
     {
         if(x[i]!=' ')
             putchar(x[i]);
         i++;
     }
     system("pause");

     return 0 ;

 }

更新代码:

int main()
{
    char x[]="Yasser Mohamed";
    char ch;
    int i=0;
    while (x[i]!='[=10=]')
    {
        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 ;
}

字符串以空 [=11=] 字符而非换行符结束。

此外,您应该添加一个 fflush 语句(至少在 linux 上)以确保打印每个字符。

为了使您的输出看起来更漂亮,请在循环后添加一个换行符。

我用 printf 替换了你的 putchar 调用,看看在我 运行 你的程序时是否有帮助。 putchar 也可能会正常工作。

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