我正在寫一個程序,它可以讀取字母,並給它們賦值2^n
,所以a=2^0
,b=2^1
.... z=2^25
然後我總結它們。在輸入的某個地方必須是|
,我之前的字母和後面的字母分開 - sum[0]=
之前|
,sum[1]=
之後|
。當我鍵入aeoifha|shzs
,一切都OK了,但是當我鍵入|abc
或abc|
,它給了我分割的錯,但我需要它告訴我它是|abc
或sum[0]=7
和sum[1]=0
爲abc|
sum[0]=0
和sum[1]=7
。如果只有|
,它是錯誤的。輸出是錯誤的,但它也給我分段錯誤。在使用getchar時在C中的分段錯誤()
下面是代碼:
const int table[] = {1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432};
const char *a_z = "abcdefghijklmnopqrstuvwxyz";
long long int sum[2] = {0};
int ch, count = 0;
for(;;)
{
if(!islower(ch = getchar()))
{
if(ch == '\n' && sum[0] && sum[1])
break;
else if(ch == EOF)
{
printf("Wrong.\n");
}
else if(ch == '|' && sum[0] != 0 && count == 0)
{
count = 1;
continue;
}
printf("Wrong.\n");
sum[0] = sum[1] = count = 0;
while(ch != '\n' && (ch=getchar())!=EOF && ch != '\n')
continue;
}
sum[count] += table[strchr(a_z, ch) - a_z];
}
任何想法如何擺脫故障,以及如何給予和[] = 0?
擺脫故障的方法是先找到原因。找到原因的方法是使用調試器。 – kaylum
如果您需要幫助,請使用正確的縮進來格式化您的代碼,並告訴我們*精確*測試輸入。 – kaylum
我懷疑這條線沒有做你期望的: sum [count] + = table [strchr(a_z,ch) - a_z]; –