C語言使用scanf函數獲取數據後,使用getchar()無法獲得字符的處理方法
int main(){
42 char str[N];
43 char ch;
44 printf("String input(len<%d):",N);
45 scanf("%s",str);
47 printf("\noutput to a TXT file?[Y/N]\n");
48 ch=getchar();
49
50 if(ch=='Y' | ch=='y')
51 if((fp=fopen("HA_output.txt","w"))==NULL){
52 puts("FILE OPEN ERROR!");
53 getchar();
54 return 1;
55 }
56 /* if end */
57
58 Permutation(str,0,strlen(str));
59
60 printf("\nSum=%d",count);
61 if(fp!=NULL){
62 printf("\ndata is written in the \"HA_output.txt\" ");
63 fclose(fp);
64 }---
65 getchar();
66 }
45行使用scanf後,48行getchar無法獲得字符;
使用dgb調試信息:
(gdb) display ch
1: ch = 0 '\000'
(gdb)
(gdb) s
45 scanf("%s",str);
1: ch = 0 '\000'
(gdb) display str
2: str = "\000\364\017,\000Ї\004\b\300\204\004\bۇ\004\b\364\017,"
(gdb) s
String input(len<20):121
46 printf("\noutput to a TXT file?[Y/N]\n");
2: str = "121\000\000Ї\004\b\300\204\004\bۇ\004\b\364\017,"
1: ch = 0 '\000'
(gdb) s
output to a TXT file?[Y/N]
47 ch=getchar();
2: str = "121\000\000Ї\004\b\300\204\004\bۇ\004\b\364\017,"
1: ch = 0 '\000'
(gdb) s
49 if(ch=='Y' | ch=='y')
2: str = "121\000\000Ї\004\b\300\204\004\bۇ\004\b\364\017,"
1: ch = 10 '\n'
(gdb) print ch
$1 = 10 '\n'
字符ch直接賦值爲'\n';
getchar讀取上次輸入的最後回車符,導致getchar不起作用;
處理方法:
45 scanf("%s",str);
46 getchar();
在scanf下直接調用getchar獲取回車符;
下次再使用getchar就不受影響了。