//4-3把读到的字符串形式的整数转换为数值显示 #include<stdio.h> #include<stdlib.h> int main(){ char temp[20]; printf("请输入整数:"); scanf("%s", temp); printf("你输入了%d。\n", atoi(temp)); return 0; }
//4-6珠玑妙算 #include<time.h> #include<ctype.h> #include<stdio.h> #include<stdlib.h> #include<string.h> //生成4个不同数组的组合并存入数组x void make4digits(int x[]){ int i, j, val; for(i = 0; i < 4; i++){ do{ val = rand() % 10; for(j = 0; j < i; j++) if(val == x[j]) break; }while(j < i); //只有不相同j才会等于i x[i] = val; } } //检查已输入的字符串s的有效性 int check(const char s[]){ int i, j; if(strlen(s) != 4) return 1; //错误码1, 字符串长度不为4 for(i = 0; i < 4; i++){ if(!isdigit(s[i])) return 2; for(j = 0; j < i; j++) if(s[i] == s[j]) return 3; } return 0; //字符串有效 } //hit和blow的判断 void judge(const char s[], const int no[], int *hit, int *blow){ int i, j; *hit = *blow = 0; for(i = 0; i < 4; i++){ for(j = 0; j < 4; j++){ if(s[i] == ‘0‘ + no[j]) //数字一致 if(i == j) (*hit)++; //位置一致 else (*blow)++; //位置不一致 } } } //显示判断结果 void print_result(int snum, int spos){ if(spos == 4) printf("回答正确!!"); else if(snum == 0) printf(" 这些数字里没有答案数字。\n"); else{ printf(" 这些数字里包括%d个答案数字。\n", snum); if(spos == 0) printf(" 但是数字的位置都不一致。\n"); else printf(" 其中有%d个数字的位置都是一致的。\n", spos); } putchar(‘\n‘); } int main(){ int try_no = 0; //输入次数 int chk; //已输入的字符串的检查结果 int hit; int blow; int no[4]; //要猜的数字串 char buff[10]; //用于存放读取数字串的字符串 clock_t start, end; srand(time(NULL)); puts("* 来玩珠玑妙算吧。"); puts("* 请猜4个数字"); puts("* 其中不包含相同的数字。"); puts("* 请像4307这样连续输入数字。"); puts("* 不能输入空格字符。\n"); make4digits(no); start = clock(); do{ do{ printf("请输入:"); scanf("%s", buff); chk = check(buff); switch(chk){ case 1: puts("\a请确保输入4个字符"); break; case 2: puts("\a请不要输入除了数字以外的字符"); break; case 3: puts("\a请不要输入相同的数字"); break; } }while(chk != 0); try_no++; judge(buff, no, &hit, &blow); print_result(blow + hit, hit); }while(hit < 4); end = clock(); printf("用了%d次。\n用时%.1f秒。\n", try_no, (double)(end - start) / CLOCKS_PER_SEC); return 0; }