鱼C论坛

 找回密码
 立即注册
查看: 2415|回复: 4

[已解决]数组并集问题

[复制链接]
发表于 2019-11-21 23:34:45 | 显示全部楼层    本楼为最佳答案   
因为getchar()函数“吃掉”了第一个字符。。。。

你可以利用短路规则加一个判断
  1. for(i=0;i==0 || getchar()!='\n';i++)
复制代码
这样就不会吃掉第一个字符了,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-22 00:29:17 | 显示全部楼层
嗯。。想了一下。。上面那个普适性不够,不能满足其中一个是空数组的情况,
还是用ungetc好了
  1. char temp;
  2. for(i=0;(temp=getchar())!='\n';i++){
  3.     ungetc(temp,stdin);
  4.    ...
  5. }
复制代码


其实如果是c++,直接用cin.peek()就好了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-22 00:30:16 | 显示全部楼层
另外,这个如果我来写,我会用双指针,感觉舒服得多
  1. #include<stdio.h>
  2. #define N 100

  3. int main() {
  4.         //输入部分
  5.         int A[N], B[N], i;
  6.         memset(A, 0xff, sizeof(A)); //这样每一个未赋值的A都为-1,下面一样
  7.         memset(B, 0xff, sizeof(B));
  8.         char temp;
  9.         printf("请输入你要合并的正整型数组元素到数组A,以换行符结束:\n");
  10.         for (i = 0; (temp= getchar()) != '\n'; ++i) {
  11.                 ungetc(temp,stdin);
  12.                 scanf("%d", A + i);
  13.         }
  14.         printf("请输入你要合并的正整型数组元素到数组B,以换行符结束:\n");
  15.         for (i = 0; (temp= getchar()) != '\n'; ++i) {
  16.                 std::cin.peek();
  17.                 ungetc(temp,stdin);
  18.                 scanf("%d", B + i);
  19.         }
  20.         //==============================================
  21.         //处理部分,使用双指针,
  22.         int C[N];
  23.         memset(C, 0xff, sizeof(C));
  24.         int *p = A, *q = B, *r = C;
  25.         while (*p != -1 || *q != -1) {
  26.                 if ((unsigned int)*p < (unsigned int)*q) {
  27.                         *(r++) = *(p++);
  28.                 }
  29.                 else if ((unsigned int)*p > (unsigned int)*q) {
  30.                         *(r++) = *(q++);
  31.                 }
  32.                 else {
  33.                         *(r++) = *(p++);
  34.                         q++;
  35.                 }
  36.         }
  37.        
  38.         //==================================================
  39.         //输出部分
  40.         printf("\nA并B的数组 为:\n");
  41.         for (i = 0; C[i] != -1; ++i) {
  42.                 printf("%d ", C[i]);
  43.         }
  44. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-1 19:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表