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