我試圖理解為什么這種實作需要其他
這是我的作業代碼
#include <stdio.h>
int main()
{
int Num, row, columns; //Let Num = User Input
printf("????っ????っ PLease Enter a Number from 4 and 50 ?? ???? ????: \n");
scanf("%d", &Num);
char arr[Num][Num];
if (Num >= 4 && Num <= 50){
for (int row=0; row<Num; row )
{
for (int columns=0; columns<Num; columns ){
if (row == 0 || columns == 0){
arr[row][columns]='*';
}
else if (row == Num-1 || columns == Num-1){
arr[row][columns]='*';
}
else
arr[row][columns] = ' ';
}
}
}
else
printf("Error! Please enter a valid number :)");
for(int i = 0; i < Num; i ){
for(int j = 0; j < Num; j ){
printf("%c", arr[i][j]);
}
printf("\n");
}
return 0;
}
代碼的輸出是(取決于 input Num)
4
****
* *
* *
****
我的問題是如果我不在if else這里使用代碼為什么不起作用
for (int columns=0; columns<Num; columns ){
if (row == 0 || columns == 0){
arr[row][columns]='*';
}
if (row == Num-1 || columns ==Num-1){
arr[row][columns]='*';
}
else
arr[row][columns] = ' ';
}
輸出將是這樣的
4
*
*
*
****
我知道if-else如果第一個陳述句if是假的并且不會執行if是真,則執行陳述句。
感謝您提前回復。
uj5u.com熱心網友回復:
如果我們重新格式化原始檔案:
if (row == 0 || columns == 0){
arr[row][columns]='*';
}
else if (row == Num-1 || columns ==Num-1){
arr[row][columns]='*';
}
else
arr[row][columns] = ' ';
進入
if (row == 0 || columns == 0){
arr[row][columns]='*';
}
else{
if (row == Num-1 || columns ==Num-1){
arr[row][columns]='*';
}
else{
arr[row][columns] = ' ';
}
}
然后你可以清楚地看到差異。特別是考慮到獨立else部分。
這樣,如果row == 0 || columns == 0為假,則不執行任何操作。但是如果沒有else if獨立的else部分,row == 0and就會發生column == 0,覆寫你之前設定的內容。
uj5u.com熱心網友回復:
在原代碼中,else陳述句只在條件row == 0 || columns == 0和row == Num-1 || columns ==Num-1都為假時執行。
在更新的代碼中,else當row == Num-1 || columns ==Num-1為假時執行。
如果row == 0 || columns == 0為真,則首先執行 if 塊和 else 陳述句,并將'*'其寫入陣列,但隨后會被覆寫' '。
uj5u.com熱心網友回復:
if陳述句檢查所有多個可用的if. 而如果if陳述句失敗時檢查,則if陳述句回傳 true 它不會檢查else if。
所以這取決于你的要求如何。
uj5u.com熱心網友回復:
該代碼不起作用,因為最后否則將被執行的所有事件,其中行!= 3和col!= 3,這將覆寫恒星的第一行和列的效果。if-else需要排除這些事件的發生。
您可以看到原始的正確代碼為:
if (row == 0 || columns == 0) {
arr[row][columns]='*';
}
else
{
if (row == Num-1 || columns == Num-1) {
arr[row][columns]='*';
}
else
arr[row][columns] = ' ';
}
uj5u.com熱心網友回復:
這是因為如果您else從第二個中洗掉else if,則第二個和第三個條件將形成if-else對。
例如,讓 row = 0, col = 0, Num = 4 :
它將滿足第一個條件if (row == 0 || columns == 0)并設定值arr[row][col] = arr[0][0] = '*';
但隨后它會遇到第二個條件(row == Num-1 || columns == Num-1),該條件回傳False作為 row = col = 0 和 Num-1 = 3。
所以它會去它的else部分
arr[0][0] = ' ' 將再次成為空字符。
基本上,您的程式將表現為:
if {
....
}
{
if {
....
}
else {
...
}
}
希望這個解釋對你有幫助:)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/364999.html
