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

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

運(yùn)用數(shù)組解決的猜數(shù)問題

運(yùn)用數(shù)組解決的猜數(shù)問題

C C++
Leo也叫做夾子 2016-11-19 23:28:37
#include <stdio.h>#include <time.h>#include <stdlib.h>void MakeDigit(int a[]);int InputGuess(int b[]);int IsRightPosition(int magic[], int guess[]);int IsRightDigit(int magic[], int guess[]);int main(){ int a[10]; /* 記錄計(jì)算機(jī)所想的數(shù) */ int b[4]; /* 記錄人猜的數(shù) */? ? int count; /* 記錄已經(jīng)猜的次數(shù) */ int rightDigit; /* 猜對(duì)的數(shù)字個(gè)數(shù) */ int rightPosition; /* 數(shù)字和位置都猜對(duì)的個(gè)數(shù) */ int level; /* 最多允許猜的次數(shù) */ ? ? srand(time(NULL)); MakeDigit(a); ? ? ? /* 隨機(jī)生成一個(gè)各位相異的4位數(shù) */ ? ? printf("How many times do you want to guess?"); scanf("%d", &level); count = 0; do{ printf("No.%d of %d times:\n", count+1, level); printf("Please input a number:"); if (InputGuess(b) != 0) /* 讀入用戶的猜測(cè) */ { count++; rightPosition = IsRightPosition(a, b);/*數(shù)字和位置都猜對(duì)的個(gè)數(shù)*/ rightDigit = IsRightDigit(a, b); ? /*用戶猜對(duì)的數(shù)字個(gè)數(shù)*/ rightDigit = rightDigit - rightPosition; printf("%dA%dB\n", rightPosition, rightDigit); } }while (count < level && rightPosition != 4); if (rightPosition == 4) printf("Congratulations, you got it at No.%d\n", count); ? else printf("Sorry, you haven't got it, see you next time!\n"); printf("Correct answer is:%d%d%d%d\n", a[0], a[1], a[2], a[3]); return 0;}/* 函數(shù)功能: 隨機(jī)生成一個(gè)各位相異的4位數(shù) */void MakeDigit(int a[]){ int j, k, temp; ? ? for (j=0; j<10; j++)? { a[j] = j; ? ?? } for (j=0; j<10; j++) { k = rand() % 10; temp = a[j]; a[j] ?= a[k]; a[k] = temp; }?}/* 函數(shù)功能: 讀用戶猜的數(shù),讀入失敗返回0,否則非0 */int InputGuess(int b[]){ int i, ret = 1; for (i=0; i<4; i++) { ret = scanf("%1d", &b[i]); if (ret != 1) ? ? ? ? ? /* 如果輸入非法 */ { printf("Input Data Type Error!\n"); while (getchar() != '\n'); /* 清除輸入緩沖區(qū)中的內(nèi)容 */ return 0; } } if (b[0] == b[1] || b[0] == b[2] || b[0] == b[3] || b[1] == b[2] || b[1] == b[3] || b[2] == b[3]) { printf("The digits must be different from each other!\n"); return 0; } else { return 1; }}/* 函數(shù)功能: 統(tǒng)計(jì)guess和magic數(shù)字和位置都一致的個(gè)數(shù) */int IsRightPosition(int magic[],int guess[])?{ int rightPosition = 0; int j; for (j=0; j<4; j++) { if (guess[j] == magic[j])? rightPosition = rightPosition + 1; } return rightPosition;}/* 函數(shù)功能:統(tǒng)計(jì)guess和magic數(shù)字一致(不管位置是否一致)的個(gè)數(shù) */int IsRightDigit(int magic[],int guess[])?{ int rightDigit = 0; int j, k; for (j=0; j<4; j++) { for (k=0; k<4; k++) { if (guess[j] == magic[k]) rightDigit = rightDigit + 1; } } return rightDigit;}我搞不懂為什么能將用戶輸入的一個(gè)四位數(shù)字轉(zhuǎn)化為一個(gè)含有四個(gè)元素的數(shù)組的,inputguess函數(shù)里明明沒有導(dǎo)入用戶所輸入的數(shù)啊,求解釋運(yùn)行原理。。
查看完整描述

1 回答

已采納
?
這都不會(huì)

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

for?(i=0;?i<4;?i++)
{
????ret?=?scanf("%1d",?&b[i]);
????if?(ret?!=?1)???????????/*?如果輸入非法?*/
????{
????????printf("Input?Data?Type?Error!\n");
????????while?(getchar()?!=?'\n');?/*?清除輸入緩沖區(qū)中的內(nèi)容?*/
????????return?0;
????}
}

原因在于InputGuess函數(shù)中的這些代碼。其中

scanf("%1d",?&b[i])

表示每次讀入1個(gè)數(shù)字,%1d表示讀入一個(gè)數(shù)字。若輸入1234則為4個(gè)數(shù)字,會(huì)通過for循環(huán)讀入4次。

scanf函數(shù)的返回值為成功讀入變量的個(gè)數(shù)。因?yàn)槊看巫x入一個(gè)數(shù)字,若成功讀取,必返回1。

因此

ret?=?scanf("%1d",?&b[i]);

表示每次讀入一個(gè)數(shù)字賦值到數(shù)組中的元素,如果讀入成功則將1賦值給ret。

后面的if是來處理沒有讀入成功(即用戶輸入非數(shù)字字符)的。

下次貼代碼能不能給點(diǎn)縮進(jìn)啊,就像我上面改的一樣,要不看著真的費(fèi)勁,層次不清晰。

查看完整回答
1 反對(duì) 回復(fù) 2016-11-20
  • Leo也叫做夾子
    Leo也叫做夾子
    謝大神,怎么像你一樣發(fā)成這種有行數(shù)和不同顏色的樣式啊= =,我只會(huì)發(fā)文本的....
  • 1 回答
  • 2 關(guān)注
  • 1992 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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