鱼C论坛

 找回密码
 立即注册
楼主: 122Ml

[已解决]字符串结果输出异常

[复制链接]
发表于 2020-8-4 10:48:17 | 显示全部楼层
liuzhengyuan 发表于 2020-8-4 10:45
我在楼上修改了一下……


你的程序scanf()里多了个\n
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:48:51 | 显示全部楼层
122Ml 发表于 2020-8-4 10:47
一次性程序,输入1,直接结束循环

这样呢?
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     char name[50];
  5.     int i = 0, temp;

  6.     do
  7.     {
  8.         printf("请输入合法的数字:\n");
  9.         scanf("%c\n", &name[i]);
  10.     } while (name[temp = i++] >= '1' && name[temp] <= '9');
  11.     name[i - 1] = '\0';

  12.     printf("结果是:%s\n", name);

  13.     return 0;
  14. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:49:38 | 显示全部楼层
122Ml 发表于 2020-8-4 10:47
一次性程序,输入1,直接结束循环


是要让他过滤空格和换行吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:49:42 | 显示全部楼层
baige 发表于 2020-8-4 10:48
你的程序scanf()里多了个\n

就是要多 \n,不然会多读
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:50:41 | 显示全部楼层
liuzhengyuan 发表于 2020-8-4 10:49
就是要多 \n,不然会多读

scanf()里面\n是错误的要让他换行结束多加一个\
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-4 10:51:23 | 显示全部楼层
程序能用,就是...
  1. 请输入合法的数字:
  2. 2
  3. 3
  4. 请输入合法的数字:
  5. 4
  6. 请输入合法的数字:
  7. 5
  8. 请输入合法的数字:
  9. i
  10. 请输入合法的数字:
  11. 7
  12. 结果是:2345

  13. --------------------------------
  14. Process exited after 7.376 seconds with return value 0
  15. 请按任意键继续. . .
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:52:02 | 显示全部楼层
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         char name[50];
  5.         int i=0;
  6.         printf("请输入合法的数字:\n");
  7.         while(1){
  8.             scanf("%c",&name[i]);// name[i] 用%c;
  9.             if(name[i]==' '||name[i]=='\t'||name[i]=='\n')continue;
  10.             else if(name[i]<'0'||name[i]>'9'||i>=49)break; // 当遇到不是0-9或字符数组已满 退出循环
  11.             ++i;
  12.         }
  13.         name[i] = '\0'; // 为数字之后添加字符串结尾'\0'
  14.         printf("结果是:%s\n",name);
  15.         
  16.         return 0;
  17. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:54:07 | 显示全部楼层
baige 发表于 2020-8-4 10:50
scanf()里面\n是错误的要让他换行结束多加一个\

我 VS 调试过了,使用 scanf 输入时会把 \n 也读进去,加个 \n 让它和用户输入的重叠
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-4 10:54:22 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:55:04 | 显示全部楼层


只有遇到不是数字,空格,tab,和换行或字符数组已满时程序才会结束循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:55:22 | 显示全部楼层    本楼为最佳答案   
本帖最后由 巴巴鲁 于 2020-8-4 11:07 编辑
  1. #include <stdio.h>
  2. int main()
  3. {
  4.         char name[50];
  5.         int i = 0;
  6.         char ch;
  7.         
  8.         for(i  = 0; i < 49; i++) // 最多输入49个0~9的数,最后赋值给'\0'
  9.         {
  10.                 printf("请输入合法的整数:\n");
  11.                 ch = getchar();
  12.                 getchar(); // 用来缓冲输入的回车
  13.                 if(ch >= '0' && ch <= '9')
  14.                 {
  15.                         name[i] = ch;
  16.                 }
  17.                 else
  18.                 {
  19.                         break;
  20.                 }
  21.         }
  22.         name[i] = '\0';
  23.         
  24.         printf("结果是:%s\n",name);
  25.         return 0;
  26. }
复制代码

不过输入的只能是0~9的数,如果输入两位整数,结果就不对了,不知道符不符合
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-4 10:57:56 | 显示全部楼层
巴巴鲁 发表于 2020-8-4 10:55
不过输入的只能是0~9的数,如果输入两位整数,结果就不对了,不知道符不符合

233完美,0到9够用了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:58:21 | 显示全部楼层
122Ml 发表于 2020-8-4 10:39
输入整数存储到字符串中,遇到字符结束循环。只存储整数

您描述的可真草率
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:58:57 | 显示全部楼层
baige 发表于 2020-8-4 10:55
只有遇到不是数字,空格,tab,和换行或字符数组已满时程序才会结束循环

这个方法厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-4 10:59:04 | 显示全部楼层

......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-4 10:59:50 | 显示全部楼层

下次会注意的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 11:03:26 | 显示全部楼层
122Ml 发表于 2020-8-4 10:57
233完美,0到9够用了

如果可以,设个最佳吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-8-4 11:06:37 | 显示全部楼层
122Ml 发表于 2020-8-4 10:57
233完美,0到9够用了

还是不太对,循环那里i<49,要给'\0'留一个位置,我改一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 15:44:55 | 显示全部楼层
数组中如果都是数字,是不可能通过%s输出到屏幕的,只能通过循环将数组中的每个元素显示到屏幕中。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 16:01:03 | 显示全部楼层
#include <stdio.h>


int main()
{
        int i=0;
        char name[50];

        printf("请输入合法的数字:\n");
        while(scanf("%d", &name[i])==1 && i<49 && name[i]>=1 && name[i]<=9)
        {
                printf("请输入合法的数字:\n");
                i++;
        }
        name[i] = '\0';

        //打印数组
        puts("结果是:");
        i=0;
        while (name[i] != '\0')
                printf("%d ", name[i++]);
        puts("");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 16:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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