如題,我在程式最後一行寫了scanf但好像無法成功跑出來讓使用者輸入去抓值
會變成直接結束像下面這樣:
不曉得是哪裡的問題希望有好心人可以幫忙解答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);
}
}
PS. 以後請記得貼文字程式碼。貼這種程式圖幾乎不會有人幫你重打程式做解答。OK?
因為 scanf 輸入後,會打一個 [Enter],所以前面 scanf 你輸入 a, b 後,其實緩衝區裡還有一個 [Enter]。然後你又是讀一個字元,所以 scanf("%c", &next) 就把 [Enter] 讀走了。[Enter] 不是 'Y' 當然就結束了。
所以解法:
#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; // 此行已修改
}