iT邦幫忙

2

[C語言]scanf寫在程式尾端會直接結束無法輸入的問題

  • 分享至 

  • xImage

如題,我在程式最後一行寫了scanf但好像無法成功跑出來讓使用者輸入去抓值
會變成直接結束像下面這樣:
https://ithelp.ithome.com.tw/upload/images/20221202/20155650XOuR82cUST.jpg
不曉得是哪裡的問題希望有好心人可以幫忙解答orz
程式碼如下:
#include<stdio.h>
int main()
{
char next = 'y';
while(next=='y' || next=='Y'){
int a, b;
printf("請輸入兩個值大於0的正整數,如任何一個輸入值不大於0則請重新輸入:\n");
scanf("%d %d", &a, &b);
while(a<0 || b<0){
printf("請輸入兩個值大於0的正整數,如任何一個輸入值不大於0則請重新輸入:\n");
scanf("%d %d", &a, &b);
}
int c = a%2;
int d = b%2;

if(a==b){
    switch(c){
    case 1:
        printf("您輸入兩個相同的正整數,其值為奇數。\n");
        break;
    case 0:
        printf("您輸入兩個相同的正整數,其值為偶數。\n");
    }
}
else{
	if(c==d){
		switch(c){
    case 1:
        printf("您輸入的兩個正整數值,其值均為奇數。\n");
        break;
    case 0:
        printf("您輸入的兩個正整數值,其值均為偶數。\n");
    }
	}
	else if(c==1 && d==0)
		printf("您輸入的兩個正整數值,其值先為奇數,後為偶數。\n");
	else
		printf("您輸入的兩個正整數值,其值先為偶數,後為奇數。\n");
}

printf("請問是否再重複執行以上程式?如是請輸入(Y)/(y):\n");
scanf("%c", &next);
}

}

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
wiseguy
iT邦超人 1 級 ‧ 2022-12-03 00:27:29
最佳解答

PS. 以後請記得貼文字程式碼。貼這種程式圖幾乎不會有人幫你重打程式做解答。OK?

因為 scanf 輸入後,會打一個 [Enter],所以前面 scanf 你輸入 a, b 後,其實緩衝區裡還有一個 [Enter]。然後你又是讀一個字元,所以 scanf("%c", &next) 就把 [Enter] 讀走了。[Enter] 不是 'Y' 當然就結束了。
所以解法:

  1. 可以換成讀數字(%d),比如 0 結束
  2. 讀 next 之前清除緩衝區。加一個 fflush(stdin); 指令
0
小幫手
iT邦新手 5 級 ‧ 2022-12-14 02:49:49

#include<stdio.h>

int main(int argc, char *argv[]){ // 此行已修改

char next = 'y';
while(next=='y' || next=='Y'){
int a, b;

printf("請輸入兩個值大於0的正整數,如任何一個輸入值不大於0則請重新輸入:\n");
scanf("%d", &a); // 此行已修改
scanf("%d", &b); // 此行已修改

while(a<0 || b<0){
printf("請輸入兩個值大於0的正整數,如任何一個輸入值不大於0則請重新輸入:\n");
scanf("%d", &a); // 此行已修改
scanf("%d", &b); // 此行已修改
}

int c = a%2;
int d = b%2;

if(a==b){
switch(c){
case 1:
printf("您輸入兩個相同的正整數,其值為奇數。\n");
break;
case 0:
printf("您輸入兩個相同的正整數,其值為偶數。\n");
}
}

else{
if(c==d){
switch(c){
case 1:
printf("您輸入的兩個正整數值,其值均為奇數。\n");
break;
case 0:
printf("您輸入的兩個正整數值,其值均為偶數。\n");
}
}
else if(c==1 && d==0)
printf("您輸入的兩個正整數值,其值先為奇數,後為偶數。\n");
else
printf("您輸入的兩個正整數值,其值先為偶數,後為奇數。\n");
}

printf("請問是否再重複執行以上程式?如是請輸入(Y)/(y):\n"); // 此行已修改
scanf("%s", &next); // 此行已修改

}
return 0; // 此行已修改
}

我要發表回答

立即登入回答