0
我試圖從標準輸入中讀取字符和行,並且遇到了問題。scanf第二次未讀取輸入
這是我想讀入變量輸入:
6 4
engine
brakes
tires
ashtray
vinyl roof
trip computer
Chevrolet
20000.00 3
engine
tires
brakes
Cadillac
70000.00 4
ashtray
vinyl roof
trip computer
engine
Hyundai
10000.00 3
engine
tires
ashtray
Lada
6000.00 1
tires
0 0
第一行是兩個數字代表有多少零件將被列出,然後又有多少企業會盡量滿足這些零件。
六條線是試圖匹配部件要求的公司的名稱,其後的下一行是兩個數字:該車將花費多少,以及製造商可以滿足多少部件要求。
然後,列出製造商可以放入汽車的零件。
然後,來自其他製造商,他們的汽車的成本,他們能夠滿足零件,零件清單等
最後,我打印出來誰中標。
這是我使用這樣做代碼:
#define MAX_LEN 80
int main(){
int rfpNum = 0;
int n, p, reqMet, numMet, nCopy, numActualMet;
float maxCompliance=-1, lowestBid=-1, tmpCompliance;
float bid;
char req[MAX_LEN], bidder[MAX_LEN];
char winner[MAX_LEN];
char **reqs;
char *pos;
while (scanf("%d %d *[^\n]", &n, &p), (n && p)){
reqs = new char*[n];
nCopy = n;
maxCompliance = -1;
while (nCopy--){
fgets(req, MAX_LEN, stdin);
if ((pos=strchr(req, '\n')) != NULL)
*pos = '\0';
reqs[nCopy] = new char[MAX_LEN];
sprintf(reqs[nCopy], "%s", req);
}
while (p--){
fgets(bidder, MAX_LEN, stdin);
if ((pos=strchr(bidder, '\n')) != NULL)
*pos = '\0';
numActualMet = 0;
scanf("%f %d *[^\n]", &bid, &numMet);
while (numMet--){
fgets(req, MAX_LEN, stdin);
if ((pos=strchr(req, '\n')) != NULL)
*pos = '\0';
for (int i=0; i<n; i++){
if (strcmp(req, reqs[i]) == 0) numActualMet++;
}
}
tmpCompliance = (float) numActualMet/n;
if (tmpCompliance > maxCompliance){
maxCompliance = tmpCompliance;
strncpy(winner, bidder, MAX_LEN);
lowestBid = bid;
}
else if ((maxCompliance == tmpCompliance) && (lowestBid == -1 || bid < lowestBid)) {
lowestBid = bid;
strncpy(winner, bidder, MAX_LEN);
}
}
rfpNum++;
if (rfpNum != 1)
printf("\n");
printf("RFP #%d\n", rfpNum);
printf("%s\n", winner);
}
return 0;
}
問題是,我必須輸入0 0兩次它退出之前。任何想法爲什麼?