第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

程序不會(huì)等待用戶使用scanf(“%c”,&yn);的輸入;

程序不會(huì)等待用戶使用scanf(“%c”,&yn);的輸入;

C
POPMUISE 2019-09-26 14:46:09
程序不會(huì)等待用戶使用scanf(“%c”,&yn);的輸入;這是我正在編寫的使用C中的文件練習(xí)的程序的基本代碼。我試圖檢測(cè)輸出文件是否已經(jīng)存在,以及是否確實(shí)存在,我想詢問(wèn)用戶是否要覆蓋它。這就是我首先使用fopen(outfilename,“ r”);打開(kāi)outfilename文件的原因;與fopen(outfilename,“ w”);相反。它檢測(cè)文件不存在的情況,但是,如果確實(shí)存在,則執(zhí)行printf(“輸出文件已存在,覆蓋(y / n):”); 語(yǔ)句,但完全忽略scanf(“%c”,&yn); 聲明!如果文件不存在,則在程序末尾的printf讀取“ yn = 0”,如果存在,則讀取“ yn =“。有誰(shuí)能夠幫助我?#include <stdio.h>#include <stdlib.h>#include <float.h>#include <string.h>int main(void) {     FILE *inf;     FILE *outf;     char filename[21],outfilename[21];     char yn='0';     printf("Please enter an input filename: ");     scanf("%s",&filename);     printf("Please enter an output filename: ");         scanf("%s",&outfilename);     /* Open file for reading */     inf=fopen (filename,"r");     outf=fopen(outfilename,"r");     /*check that input file exists*/     if (inf!=NULL) {         /*check that the output file doesn't already exist*/         if (outf==NULL){             fclose(outf);             /*if it doesn't already exist create file by opening in "write" mode*/             outf=fopen(outfilename,"w");         } else {             /*If the file does exist, give the option to overwrite or not*/             printf("Output file already exists, overwrite (y/n):");             scanf("%c",&yn);         }     }     printf("\n yn=%c \n",yn);     return 0;}
查看完整描述

3 回答

?
茅侃侃

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊

printf("Please enter an output filename: ");    scanf("%s",&outfilename);

當(dāng)您輸入第二個(gè)字符串并按ENTER鍵時(shí),一個(gè)字符串和一個(gè)字符將被放置在輸入緩沖區(qū)中,它們分別是:輸入的字符串和換行符。該字符串被消耗,scanf但換行符仍保留在輸入緩沖區(qū)中。

進(jìn)一步,

scanf("%c",&yn);

下一個(gè)scanf用于讀取字符的字符僅讀取/使用換行符,因此從不等待用戶輸入。

解決方案是使用以下命令消耗多余的換行符:

scanf(" %c", &yn);
      ^^^   <------------Note the space

或使用 getchar()

您可能需要在這里查看我的答案,以逐步詳細(xì)地解釋問(wèn)題。


查看完整回答
反對(duì) 回復(fù) 2019-09-26
?
交互式愛(ài)情

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊

采用

scanf("%20s",&filename);

并記住stdin是行緩沖的,在Linux上遵循tty準(zhǔn)則

如果需要更詳細(xì)的控制,可以使用GNU readlinencurses。


查看完整回答
反對(duì) 回復(fù) 2019-09-26
?
qq_笑_17

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊

scanf("%s", ...)使\ n終止輸入中的行。它不會(huì)引起下一個(gè)問(wèn)題,因?yàn)閟canf(“%s”,...)以跳過(guò)白色開(kāi)始。 scanf("%c", ...)不會(huì),因此您閱讀了\n。

順便說(shuō)一句,您可能還會(huì)遇到其他問(wèn)題,即在文件名中放置空格(%s不讀取它們),并且如果輸入的名稱太長(zhǎng)(%s沒(méi)有輸入長(zhǎng)度限制)。

解決您抱怨的問(wèn)題的一種方法(而不是另一種方法)是使用scanf(" %c", ...)(請(qǐng)參閱%c?之前的空格scanf很難使用),該方法首先跳過(guò)空白。


查看完整回答
反對(duì) 回復(fù) 2019-09-26
  • 3 回答
  • 0 關(guān)注
  • 715 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)