作者:tANGjIAqIAN
題目1
答案:D
原因:輸入的實際上是 123 45 678,而scanf 函式會按照以下步驟讀取資料:
1.%3d 格式說明符會讀取前三個數字 123 並將其賦值給 int x。由於 %3d 限制了最多讀取三個數字,scanf會在讀取三個數字後停止對x的賦值。
2.讀取完 123 後,scanf 繼續讀取下一個格式說明符 %f 指定的輸入。%f 格式說明符會讀取接下來的兩個數字 45 作為浮點數 float y 的整數部分,但由於後面緊跟的是空格而不是小數點或小數部分,scanf 會認為整數部分是 45,而小數部分是 0。
因此,x 的值是 123,y 的值是 45.000000。
題目2
1.當執行到 c1 = getchar(); 時,它會讀取第一個字元 1 並將其儲存在 c1 中。
2.接下來執行 scanf("%2d", &a1);,它會讀取接下來的兩個兩個字元作為整數,即 '2a'。但是,由於 'a' 不是一個數字,scanf 函式會停止讀取,並將已經讀取到的有效數字 '2' 轉換為整數並賦值給 a1 變數。所以 a1 的值是 2。
3.然後執行 c2 = getchar();,此時,輸入流中的下一個字元是 'a',因此 getchar() 會讀取 'a' 並將其賦值給 c2 變數。
4.然後執行 scanf("%3d", &a2);,它會讀取接下來的三個數字 3、4 和 5 並將其儲存在 a2 中
5.最後執行printf("%d, %d, %c, %c\n", a1, a2, c1, c2);這行程式碼列印出 a1, a2, c1, 和 c2 的值
因此,正確的答案是 (A) 2, 345, 1, a
題目3
17,21,11
題目4
*3.140000, 3.142*
題目5
#include<stdio.h>
int main()
{
char uppercase;
// 提示使用者輸入一個大寫字母
printf("請輸入一個大寫字母: ");
// 讀取使用者輸入的一個字元
scanf("%c", &uppercase);
char lowercase = uppercase + 32;
// 輸出轉換後的小寫字母
printf("對應的小寫字母是: %c\n", lowercase);
return 0;
}
題目6
問題:直接跳過了第二個scanf
#include <stdio.h>
main()
{
int a;
char b;
float c;
printf("Please input an integer:\n");
scanf("%d", &a);
printf("integer:%d\n", a);
printf("Please input a character:\n");
scanf("%c", &b);
printf("character:%c\n", b);
printf("Please input a float number:\n");
scanf("%f", &c);
printf("float:%f\n", c);
}
改進
#include <stdio.h>
int main() {
int a;
char b;
float c;
printf("Please input an integer:\n");
scanf("%d", &a);
printf("integer:%d\n", a);
// 清除輸入緩衝區中的換行符
getchar();
printf("Please input a character:\n");
scanf("%c", &b);
printf("character:%c\n", b);
printf("Please input a float number:\n");
scanf("%f", &c);
printf("float:%f\n", c);
return 0;
}