C語言scanf語句的問題。
輸入兩個整數和一個字符,如果該字符為y,則進行兩個數的交換(swap)並輸出結果;否則,輸出字符串“No swap”
為什麼我在vc6.0中運行,將要輸入第三個字符時就說遇到問題需要關閉,不能運行
在TC2.0中運行時只輸入前兩個數字就自動結束了,
怎樣才能正常運行呢?
#include<stdio.h>
main()
{
int a,b,swap;
char d;
printf("shu ru shu ju\
");
scanf("%d%d",&a,&b);
scanf("%c",d);
if(d=='y')
{
swap=a;
a=b;
b=swap;
printf("%d%d\
",a,b);
}
else printf("No swap\
");
}
以上程序為什麼不能運行呢。。
而以下程序就能運行。
#include "stdio.h"
void main(void)
{
int a, b, swap;
char d;
printf("shu ru shu ju\
");
scanf("%d\
%d\
", &a, &b); //這裡要兩個換行符,就可以了//
scanf("%c", &d);
if(d =='y')
{
swap=a;
a=b;
b=swap;
printf("%d%d\
", a, b);
}
else
主要是多了兩個換行符“\
”
就可以運行了。
請問這是什麼原因呢,
printf("No swap\
");
}
最佳回答:
除了三樓說的,建議樓主以後一個scanf就針對一個變量。否則兩個變量之間用空格或者逗號隔開,輸入的時候也需要輸入空格或逗號。同時在輸入char型時注意,之前最後一次使用scanf或printf的時候,如果你使用了回車作為結束確認,回車符就直接被你這次的scanf給讀取了。像樓主原來的寫法,按照意圖應該是輸入一個整數回車、再整數再回車、再字符再回車。但是實際上第二個整數後的回車在被按下後就直接作為字符傳給原本想賦再輸入的字符的變量了。解決的方法就是要不用“%d%d\
”,要不輸入字符前額外用一次scanf,把回車讀掉。其中後者最保險:對於printf也可以使用
另外VC(之外的不清楚)中%d%d這樣的也不是分不出來,你輸入一個整數加空格或回車再整數就行了。
以上這些問題,你保持原來兩個連續%d,輸入的數據是:整數+空格或回車+整數+任意字符,然後Debug中Watch一下a、b、d。這樣就至少知道什麼操作導致什麼現象。細究有些麻煩,所以一個scanf只對應一個變量時最不可能處岔子的方法。同時注意輸入單字符注意的問題。