2

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

7 回答 7

4

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

while (x[i]) /* until the null byte is found */
{
    if (x[i] != ' ')
        putchar(x[i]);
    i++;
}
于 2016-12-31T12:03:30.393 回答
1

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

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

x[i]不是'\n'为任何x[i]定义的。

如果您改为将其写为i!= 14. 然后循环会停在你名字的末尾。超越是未定义的,因为这不是您的可变内存区域。

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

正确的代码可能是

 #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 ;

 }
于 2016-12-31T12:07:13.307 回答
1

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

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

于 2016-12-31T12:02:30.890 回答
0

\n你原来没有x,所以你只是继续迭代未初始化的内存,直到你碰巧遇到\n。相反,您应该迭代到字符串终止字符 - \0

while (x[i] != '\0') {
// Here --------^
于 2016-12-31T12:03:44.827 回答
0

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

for (int i = 0; x[i] != 0; i++) {
    if (x[i] != ' ')
        putchar(x[i]);
}
于 2016-12-31T12:03:50.397 回答
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 ;

 }
于 2016-12-31T12:03:54.533 回答
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)了,因为它似乎没有帮助。我改为添加换行符打印。

于 2016-12-31T12:14:01.160 回答