这是一个简单的代码,试图从字符数组中清除空格,但输出不像我预期的那样" 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 ;
}
答案 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)
,因为它似乎没有帮助。我添加了换行符字符。