我是 C 編程的新手……我們有整數的二維陣列……但是如何宣告和獲取二維字串陣列的輸入……我嘗試過一次獲取類似于整數陣列的單個字符輸入。 ..但我想一次將整個字串作為輸入到二維陣列中..
代碼:
#include <stdio.h>
int main()
{
char str[20][20];
int i, j;
for (i = 0; i < 20; i )
{
for (j = 0; j < 20; j )
{
scanf("%c", &str[i][j]);
}
}
}
任何人都可以解決這個問題嗎?
uj5u.com熱心網友回復:
您的代碼存在一些問題。使用scanf到達字符,您將閱讀換行符。如果我使用額外的幾行來列印輸入的代碼的更小版本,我們可以看到:
#include <stdio.h>
int main() {
char str[3][3];
int i, j;
for (i = 0; i < 3; i ) {
for (j = 0; j < 3; j ) {
scanf("%c", &str[i][j]);
}
}
for (i = 0; i < 3; i ) {
for (j = 0; j < 3; j ) {
printf("%c ", str[i][j]);
}
printf("\n");
}
}
并運行它:
$ ./a.out
gud
ghu
ert
g u d
g h
u
e
$
我們可以測驗輸入來規避這一點。如果輸入的字符是換行符 ( '\n'),那么我們將j非常有效地遞減,我們已經將回圈退回了一步。我們可以很容易地擴展這個布爾條件來忽略其他空白字符,比如' 'or '\t'。
#include <stdio.h>
int main() {
char str[3][3];
int i, j;
for (i = 0; i < 3; i ) {
for (j = 0; j < 3; j ) {
char temp = 0;
scanf("%c", &temp);
if (temp == '\n' || temp == ' ' || temp == '\t') {
j--;
}
else {
str[i][j] = temp;
}
}
}
for (i = 0; i < 3; i ) {
for (j = 0; j < 3; j ) {
printf("%c ", str[i][j]);
}
printf("\n");
}
}
現在,當我們運行這個:
$ ./a.out
gud
ghu
ert
g u d
g h u
e r t
$
當然,您應該做的另一件事是檢查 的回傳值scanf,它int表示讀取的專案數。在這種情況下,如果它回傳0,我們就知道它沒有讀取任何內容。在這種情況下,在內部回圈中,我們可能還想遞減j以使回圈繼續。
uj5u.com熱心網友回復:
#include<stdio.h>
main()
{
char name[5][25];
int i;
//Input String
for(i=0;i<5;i )
{
printf("Enter a string %d: ",i 1);
}
//Displaying strings
printf("String in Array:\n");
for(int i=0;i<5;i )
puts(name[i]);
}
uj5u.com熱心網友回復:
一個二維字串陣列的宣告可以描述為: char string[m][n]; 其中 m 是行大小,n 是列大小。如果你想一次把 m 個字串作為一個完整的字串作為輸入...如下
#include<stdio.h>
int main()
{
char str[20][20];
int i,j;
for(i=0;i<m;i )
{
gets(str[i]);
}
}
這里 'i' 是字串的索引......希望這個答案有幫助......
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/321557.html
