void main(){
/* This string needs to be printed without the '%' and in segments. */
char str[] = "Oct: %o Dec: %d Roman: %r";
int i = 0;
while (str[i] != '\0'){
/* When I run this nested loops, for some reason they don't stop at '\0'. */
while (str[i] != '%'){
printf("%c", str[i++]);
}
if (str[i] == '%')
i++;
}
}
1
A
回答
5
您要打印的所有字符字符串中,省略任何%
字符。你不需要内部循环,而内部循环就是你所有困境的原因。内循环将超出字符串的末尾,因为它不测试空终止字符。
的简单的解决方案是具有if
语句来替换内部循环。这个想法是遍历整个字符串,并打印任何不是%
的字符。
int i = 0;
while (str[i] != '\0')
{
if (str[i] != '%')
printf("%c", str[i]);
i++;
}
虽然我可能会写使用指针:
const char *p = str;
while (*p)
{
if (*p != '%')
printf("%c", *p);
p++;
}
顺便说一句,你main
函数有一个非标准的声明。对于C main
不希望处理的参数您的主要应该是:
int main(void)
0
,虽然将跳过 '\ 0',因为它不是一个 '%'
0
@BryanOlivier是正确的,所以
while ((str[i] != '%')&&(str[i] != '\0')){
printf("%c", str[i++]);
}
,而不是
while (str[i] != '%'){
printf("%c", str[i++]);
}
试这个。
1
的问题是,一旦你到这里:
Oct: %o Dec: %d Roman: %r
^
内while循环只会永远保持纺纱(你可以验证通过删除r
,它会停止,因为它应该)。
要解决此问题,您可以用if (str[i] != '%')
替换while (str[i] != '%')
,而不必触摸原始字符串。
一些更多的评论:
变化从void
到int
返回类型的main
。而刚刚的main
结束括号前添加return 0;
。这是一个典型的C约定,它向操作系统指示运行是否成功(0表示正常,非零意味着有问题)。
如果您编译代码,你应该已经得到了它警告警告(不要让他们因为一些错误并不总是那么明显和警告通知做你为他们伟大的工作)。
随着我的GCC编译器我warning: return type of ‘main’ is not ‘int’ [-Wmain]
。我与-Wall
和-Wextra
标志运行它。
0
你应该这样做,而不是 - >
while (str[i] != '\0'){
if(str[i++] != '%') {
printf("%c", str[i])
}
else {
}
}
相关问题
- 1. 这个C++程序有什么问题?
- 2. 这个QuickSort程序有什么问题?
- 3. 这个程序有什么问题?
- 4. 这个Clojure程序有什么问题?
- 5. 这个短程序有什么问题?
- 6. 这个程序有什么问题?
- 7. 这个C程序有什么问题?
- 8. 这个C程序有什么问题?
- 9. 这个Fortran程序有什么问题?
- 10. 这个python程序有什么问题?
- 11. 这个Android程序有什么问题?
- 12. 这个程序有什么问题?
- 13. 这个程序有什么问题?
- 14. 这个棋盘小程序有什么问题?
- 15. 这个小Python包有什么问题?
- 16. 我的小程序有什么问题?
- 17. 这个C++程序有什么问题?我什么都试过
- 18. 这个程序出了什么问题?
- 19. 这个javascript排序有什么问题
- 20. 这个SQL过程有什么问题?
- 21. 这个编程有什么问题?
- 22. 有没有人知道这个程序有什么问题?
- 23. 这个用于XML的序列化程序有什么问题?
- 24. 这个快速排序程序有什么问题?
- 25. 这个java线程程序有什么问题
- 26. 这个C程序有什么问题? (全局变量)
- 27. 这个C++程序有什么问题?它核心转储
- 28. 这个C程序有什么问题,文件读取?
- 29. 这个程序中的strcmp有什么问题?
- 30. 这个程序的逻辑有什么问题?
'而(STR [1] = '%'!)'将跳过'\ 0'。 –
你为什么期望内循环停止在'\ 0'处? –
哦,别忘了'void main()'不好。使用'int main()'或'int main(int argc,char * argv [])''。 – tangrs