2012-10-28 14 views
-2

我想從用戶採取2維char數據,但它沒有正確地從用戶輸入。你可以突出顯示以下代碼中的錯誤嗎?這個2維char數組的char輸入有什麼問題?爲什麼它不採取總計K * K輸入?

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 

int main() 
{ 
int i, j, k; 
char **ch; 

printf("\nEnter k : "); 
scanf("%d",&k); 

ch = (char **) malloc (sizeof(char*) * k); 
if(ch == NULL) { printf("\n Not enough memory for ch array "); exit(0);} 
for(i = 0; i < k; i++) { 
    ch[i] = (char *) malloc (sizeof(char) * k); 
    if(ch[i] == NULL) { printf("\n Not enough memory for ch array "); exit(0);} 
} 

printf("\nenter char matrix (%d X %d)\n", k,k); 
for(i = 0; i < k; i++) { 
    for(j = 0; j < k; j++) { 
     scanf("%c", (*(ch + i) + j)); 
    } 
} 

printf("\n char matrix : \n"); 
for(i = 0; i < k; i++) { 
    for(j = 0; j < k; j++) { 
     printf("%c ",*(*(ch + i) + j)); 
    } 
    printf("\n"); 
} 

for(i = 0; i < k; i++) free(*(ch + i)); 
free(ch); 
return 0; 
} 

我試圖通過int更換char。它對整數工作正常。

charstdin讀什麼錯?

+2

「請突出顯示以下代碼中的錯誤」 - 您認爲本網站是一個免費的調試服務?學習自己使用調試器! –

+0

什麼是輸入?什麼是預期的輸出?實際產出是多少? –

回答

0

問題:有

scanf("%c", (*(ch + i) + j)); 

scanf("%d",&k);仍然在輸入緩衝器換行符,即成爲char矩陣的第一個條目。如果在填充矩陣時輸入更多新行,它們也會成爲矩陣條目。

在填充矩陣之前清空輸入緩衝區。

int c; 
do { 
    c = getchar(); 
}while(c != '\n' && c != EOF); 
if (c == EOF) { 
    // input stream broken, yell 
} 
0

實驗這個小程序,直到你對scanf()感到滿意爲止。瞭解有關getchar()和換行符的信息。

#include <stdio.h> 

int main(int argc, char **argv) { 
    char a,b,c; 
    scanf("%c", &a); 
    scanf("%c", &b); 
    scanf("%c", &c); 
    printf("a='%c', b='%c', c='%c'\n", a, b, c); 
    return 0; 
} 
相關問題