我正在嘗試用 C 語言撰寫一個程式,它從 0 列印到 100,然后要求用戶再次列印它。它不作業。
#include <stdio.h>
#include <string.h>
int main()
{
int num;
char resposta[0];
resposta[0] = 's';
num = 0;
do
{
for (int i = 0; i < 100; i )
{
num = 1;
printf("%i\n", num);
printf("Repetir?s/n\n");
scanf("%c", resposta[0]);
}
} while ((strcmp(resposta[0], "S") == 0) || (strcmp(resposta[0], "s") == 0));
return 0;
}
uj5u.com熱心網友回復:
在 C 中宣告陣列時,括號[]中的數字不是索引號,而是陣列中包含的元素的總數。設定char resposta[0];意味著 resposta 不包含任何元素。
這與訪問元素時不同,后者使用零索引。所以運行scanf("%c", resposta[0]);是試圖訪問第一個元素,但 resposta 中有零個元素,所以這可能是它不起作用的原因。
我還想我應該補充一點,完全有可能只創建一個char不是陣列的變數,因為您似乎只需要一個字符。char resposta;不用括號就行了。
如果您有興趣,可以了解有關 Arrays 的更多資訊:W3Schools
uj5u.com熱心網友回復:
有很多問題。
- 你有一個可以包含 0 個元素的陣列,這是毫無意義的,你想要
char resposta[1]。 - 但是你無論如何都不想要一個字符陣列。您正在使用說明
%c符,您需要一個char而不是一個 s 陣列char。 - 您正在混淆字串和字符。更改
strcmp(resposta[0], "S")==0為resposta == 'S',前提是您已宣告char resposta;。 - 您是在詢問用戶是否想在 for 回圈中重新開始,這可能不是您想要的。
基本上你想要這個(未經測驗的代碼):
int main() {
char resposta;
resposta = 's';
int num = 0;
do {
num = 0;
for (int i = 0; i < 100; i ) {
num = 1;
printf("%i\n", num);
}
printf("Repetir?s/n\n");
scanf("%c", &resposta); // not the useage of the & operator here
} while (resposta == 'S' || resposta == 's');
}
uj5u.com熱心網友回復:
它不起作用的原因之一是程式停止要求用戶繼續回圈。另一個失敗是第二次和后續運行所使用的計數器未重置為零。另一個失敗是scanf 格式說明符沒有從輸入緩沖區中清除換行符。下一個“獲取輸入”將找不到要繼續的 S/s,但會拾取 LF 并終止回圈。
如果分開,事情可以簡化。與用戶的互動定義非常明確,應該被分解到它自己的功能中:
#include <stdio.h>
int again(void) {
puts( "Repetir? " );
char ch;
return scanf( " %c", &ch ) == 1 && (ch == 'S' || ch == 's' );
}
// Edit: Just noticed the OP title says "0 to 100"
void out(void) {
int i = 0;
while( i <= 100 ) printf( "%i\n", i );
}
int main() {
do out(); while( again() );
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/512698.html
標籤:C印刷数字
下一篇:傳遞給if陳述句的函式
