-
void f(int n,int **p)if (n<=0)
return;
int *a=(int*)malloc(n*sizeof(int));
for(int i=0;i
#include
void f(int n,int **p)if (n<=0)
return;
int *a=(int*)malloc(n*sizeof(int));
for(int i=0;iscanf("%d",&a[i]);
p=a;int main()
int n =4;
int *parr=0;
f(n,&parr);
for(int i=0;iprintf("%d",parr[i]);
system("pause");
return 0;
注意:在 main 函式中,n 是乙個變數,例如,如果您編寫 scanf("%d",&n);然後將其代入函式 f(n,&parr); 它也可以通過,主要是因為它通過使用動態分配記憶體的方法使這種方法變得可行。
-
樓上已經明確表示,如果不需要呼叫函式的形式,只需使用for迴圈即可,如下所示;
#include
#define n 5
main()
int a[n];
int i;
for(i=0;iscanf("%d",&a[i]);
for(i=0;iprintf("%d",a[i]);
-
舉幾個例子,大家可以理解這個函式,因為這兩個字元一般是用來控制輸入的,所以只討論空格回車的情況。
1.如果輸入資料為非 char 型別:
int a, b;
scanf("%d%d",&a,&b);
在這種情況下,輸入法可以是 1 空格 2
或 1 個空間空間。 2
或 1 輸入 2
或 1 輛車還車。 2
此時,可以得出結論,scanf 不僅接收忽略空格,還接收回車符。
int a, b;
scanf("%d,%d",&a,&b);
在這種情況下,輸入法可以是 1 空格 2
或 1 個空間空間。 2
或 1 輸入 2
或 1 輛車還車。 2(只需確保 1 後跟逗號,並且任何奇怪的輸入都是正確的)。
在這一點上,可以得出結論,scanf 接收不僅忽略了空格,還忽略了回車符,但在逗號的情況下,它必須遵循一定的格式,否則會發生錯誤。
2.讓我們看一下輸入資料為 char 型別的情況:
char a, b;
scanf("%c%c",&a,&b);或者 scanf("%c,%c",&a,&b);
此時,只能對輸入進行格式化,不會忽略任何字元。
就這些了,也許你多想想,我沒提過,有什麼問題可以提出來,一起討論。
-
複製貼上一大堆廢話,scanf("%c", &c),空格被接受,空格在其他時間被忽略。
-
當 scanf() 函式接收到輸入資料時,它會在以下情況下結束資料的輸入:(scanf 函式不是結束 scanf 函式,而是僅在每個資料字段中有資料並按 Enter 鍵時才結束)。
遇到空格時,按“Enter”、“Skip Grid”鍵。
寬度的末尾。
在非法進口的情況下。
-
scanf 的輸入法完全取決於 ** 的書寫方法。
我們先來談談scanf的輸入原理:
1. scanf 輸入流的概念,當執行到 scanf 函式時,會檢查輸入流,如果為空,會要求使用者輸入。 如果它不為空,則根據 scanf 的格式引數從輸入流中讀取它。
2. %d 用於輸入整數型別,會跳過空白字元的開頭(空格製表符輸入算作空白字元),掃瞄直到第乙個數字開始,然後開始向後掃瞄,遇到空白字元或非數字時停止,然後將前乙個數字分配給相應的變數。 如果第乙個不是數字,則 scanf 將返回失敗。
如果是 %3d %2d,則將掃瞄字元的最大寬度。 如果不掃瞄寬度,如果它接觸到空白字元或非數字,它就會停止。
3. %c 用於輸入字元,不會跳過第乙個空白字元。 從輸入流的第乙個字元開始。
如果有寬度修改,例如 %3c,則將掃瞄字元的寬度,但僅將第乙個字元分配給相應的變數。
4. %s 用於輸入乙個字串,它會跳過空格字元的開頭(空格選項卡輸入算作空格字元),然後從第乙個非空格字元開始,然後開始向後掃瞄,碰到空格字元時停止,然後將上乙個字串分配給相應的變數。 %s 無法接受傳入空格,因為它在遇到空格時停止。
5. %f 用於輸入單精度浮點數型別,即浮點型,其他與 %d 相同
6. %lf 用於輸入雙精度浮點數型別,即雙精度型別,其他與 %d 相同
對於你上面的問題。
scanf(%3d%2d%3c,&a&b&ch)
輸入 123 個空格和 46 個空格 abc
輸出為 a=123,b=46,c=空格。
-
格式控制項 %3c 應該是指向字元陣列的指標,以及字元變數的位址,結果是不可預測的——如果我不在乎修改 ch 旁邊的記憶體區域的後果,我就不說了。
以下**。 #include
int main()
輸入 123 46 abc
輸出 a=123 b=46 c=' ab'
由此可見,老師顯然錯了。
-
當有寬度修改時,資料不需要分割,否則就會被分割。
-
寬度修改是對輸出資料寬度的限制,與輸入資料無關,必須對輸入資料進行分割。
-
%3d 表示乙個整數,它佔據了 3 個空格的位置,並且小於左邊的乙個空格。
我覺得它有效,我剛開始工作時做過一次,我記不太清楚了,但是你可以用 seek 函式嘗試一下,先找到它,然後再看它,我記得當我這樣做時,我讀了這本書 C 程式設計師,大約有 234 頁。