2012-11-16 248 views
1

用於動態內存中數組的工作程序。 需要等同於C.任何人都可以幫忙嗎?C++相當於C

const int n = 6; 
char **words = (char**) malloc(n *sizeof(char*)); 
for(int i = 0 ; i < n; i++) 
    words[i] = (char*)malloc(50 * sizeof(int)); 

for(int i = 0; i < n; i++) 
{ 
    cin>>words[i]; 
} 

cout<<endl; 
for(int i = 0; i < n; i++) 
{ 
    if(words[i][0] == 'q') 
     cout<<words[i]<<endl; 
} 
+2

這看起來像C&C++的混合物。你想刪除C++,並只有在C? – Matt

+4

如果是這樣的話,cin&cout是唯一需要改變的位。 – Matt

+0

是的,只有C代碼。 –

回答

6

唯一的C++部分有cincout;你可以很容易地改變他們:

cin>>words[i]; 

成爲

scanf("%s", words[i]); 

gets(words[i]); 

cout<<words[i]<<endl; 

成爲

puts(words[i]); 

順便說一句,在cin/scanf/gets你有一個潛在的緩衝區溢出,因爲你爲6個字符分配空間,但你接受任何長度的輸入。你應該這樣做,而不是:

scanf("%6s", words[i]); 

或(更容易維護,因爲它直接使用n

fgets(words[i], n, stdin); 

(儘管這將在字符串中包含尾隨\n

+0

謝謝!所有工作都正常。 –

2

您使用的唯一C++功能是cin和cout。將cin>>words[i]替換爲gets(words[i]),將cout<<words[i]<<endl替換爲puts(words[i])

1

使用scanf("%s", &words[i])來輸入數據stdin和printf("%s\n", words[i])輸出到標準輸出。

+0

使用小數轉換規範可能不會導致他想要的代碼。 –

+0

對不起,忘記了是字符串:P –

0

如你所願:

const int n = 6; 
    char **words = (char**) malloc(n *sizeof(char*)); 

    int i = 0; 

    for(i= 0 ; i < n; i++) 
    { 
     words[i] = (char*)malloc(50 * sizeof(char)); 
    } 

    for(i = 0; i < n; i++) 
    { 
     scanf("%s", words[i]); 
    } 

    printf("\n"); 

    for(i = 0; i < n; i++) 
    { 
     if(words[i][0] == 'q') 
      printf("%s\n", words[i]); 

    }