例如,用戶應該輸入類似於「ABC123」的輸入,而不是「ABC 123」或「BC123」。如何在有空間時退出scanf循環
這裏是我的代碼:
unsigned int convert_to_num(char * string) {
unsigned result = 0;
char ch;
//printf("check this one %s\n", string);
while(ch =*string++) result = result * 26 + ch - 'A' + 1;
return result;
}
int main()
{
char input_string[100];
char arr_col[100] = {'\0'};
char arr_row[100] = {'\0'};
int raiseflag;
int started_w_alpha =0;
int digitflag = 0;
while(scanf("%s", &input_string) != EOF) {
int i = 0, j = 0, digarr = 0;
while (i <=5) {
if (input_string[i] == '\0') {printf("space found!");}
if ((input_string[i] >= 'A' && input_string[i] <= 'Z') && (digitflag == 0)) {
started_w_alpha = 1;
arr_col[j] = input_string[i]; j++;
}
//printf("something wrong here %s and %d and j %d\n", arr_holder, i, j);
if (started_w_alpha == 1) {
if (input_string[i] >=48 && input_string[i]<=57){ digitflag = 1; arr_row[digarr] =input_string[i]; digarr++; }
}
i++; if (i == 5) { raiseflag =1; }
}
printf(" => [%d,%s]\n", convert_to_num(arr_col), arr_row);
if (raiseflag == 1) { raiseflag = 0; memset(arr_col, 0, 5); memset(input_string, 0, 5); memset(arr_row, 0, 5); digitflag = 0; started_w_alpha = 0; }
}
return 0;
}
顯然,\ 0並不在我的情況下工作,因爲我有5和用戶的陣列可以把2個字符。只要在字符之間找到空格,我就想退出循環。
這是整個代碼。我添加了{'\ 0'}我的數組,因爲當少於5個字符時我會得到額外的字符。 謝謝!
你的緩衝區不夠大,而你需要做的'== 1'而不是'!= EOF' – 2014-11-05 00:38:42
@MattMcNabb謝謝馬特!我會更新它。 – Frank 2014-11-05 00:43:13
in'if(input_string [i] =='\ 0')''\ 0''表示字符串結束,如果你發現它應該打破循環。 – SHR 2014-11-05 00:46:06