找不到錯誤
求助大家
我的想法:
jud是1時表示是迴文,預設為1
利用迴圈檢查,只要有任何一組不對就把jud變為0然後直接離開迴圈
#include <stdio.h>
#include <string.h>
int main()
{
char c[1000] = "0";
fgets(c, 1000, stdin);
int n = strlen(c);
int jud = 1;
for(int i = 0; i < n/2; i++) {
if(c[i] != c[n-2-i]) {
jud = 0;
break;
}
}
if(jud == 1)
printf("yes");
else if(jud == 0)
printf("no");
return 0;
}
找不到錯誤
求助大家
我的想法:
jud是1時表示是迴文,預設為1
利用迴圈檢查,只要有任何一組不對就把jud變為0然後直接離開迴圈
#include
#include
int main()
{
char c[1000] = "0";
fgets(c, 1000, stdin);
int n = strlen(c);
int jud = 1;
for(int i = 0; i < n/2; i++) {
if(c[i] != c[n-2-i]) {
jud = 0;
break;
}
}
if(jud == 1)
printf("yes");
else if(jud == 0)
printf("no");
return 0;
}
問題來自於fgets。你在測試的時候,應該是輸入字串後按enter,fgets讀取後,最後面會產生換行符號,因此strlen(c)的長度會比真正的長度大1。而在zerojudge的測資中,最後面沒有換行符號,所以c[n-2-i]會跟你想像的不太一樣。
我的建議是不要用fgets,可以改用scanf之類的就不會有這種問題。
你有興趣的話,可以建立文字檔,檔案內容是一組測資,注意最後面不要輸入換行,然後執行程式時使用重導向,看看字串長度是否不一樣:
執行檔 < 測資檔案
找不到錯誤
求助大家
我的想法:
jud是1時表示是迴文,預設為1
利用迴圈檢查,只要有任何一組不對就把jud變為0然後直接離開迴圈
#include
#include
int main()
{
char c[1000] = "0";
fgets(c, 1000, stdin);
int n = strlen(c);
int jud = 1;
for(int i = 0; i < n/2; i++) {
if(c[i] != c[n-2-i]) {
jud = 0;
break;
}
}
if(jud == 1)
printf("yes");
else if(jud == 0)
printf("no");
return 0;
}
問題來自於fgets。你在測試的時候,應該是輸入字串後按enter,fgets讀取後,最後面會產生換行符號,因此strlen(c)的長度會比真正的長度大1。而在zerojudge的測資中,最後面沒有換行符號,所以c[n-2-i]會跟你想像的不太一樣。我的建議是不要用fgets,可以改用scanf之類的就不會有這種問題。
你有興趣的話,可以建立文字檔,檔案內容是一組測資,注意最後面不要輸入換行,然後執行程式時使用重導向,看看字串長度是否不一樣:
執行檔 < 測資檔案
後來我發現很多網友都不推scanf...
如果你是因此用fgets的話,你可以先把後面的換行符號去掉