鱼C论坛

 找回密码
 立即注册
查看: 1574|回复: 47

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

[复制链接]
发表于 2020-8-4 10:19:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         char name[50];
  5.         int i=0;
  6.        
  7.         do
  8.     {
  9.             printf("请输入合法的数字:\n");
  10.             scanf("%s",&name[i]);
  11.         }
  12.         while(name[++i]>=1&&name[++i]<=9);
  13.        
  14.         printf("结果是:%s\n",name);
  15.        
  16.         return 0;
  17. }
复制代码

输入整数存储到字符串中,遇到字符结束循环。
我输入两位数时,直接跳转到结果:如输入4,结果4;
输入两位数,正常运行,但再次输入一位整数,跳转结果:如输入47,48,1,输出47481。
求助,在输入一位整数时不跳转结果。
最佳答案
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:21:14 | 显示全部楼层
本帖最后由 liuzhengyuan 于 2020-8-4 10:23 编辑
  1. #include <stdio.h>

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

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

  11.     printf("结果是:%c\n", name[1]);

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

使用道具 举报

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

emmmmmm照例跳转,后面还赠送了个乱码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:24:30 | 显示全部楼层
122Ml 发表于 2020-8-4 10:23
emmmmmm照例跳转,后面还赠送了个乱码


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

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

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

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

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

使用道具 举报

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

这次连结果都不输出了.......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

  2. int main()
  3. {
  4.         char name[50];
  5.         int i=0;
  6.        
  7.         do
  8.     {
  9.             printf("请输入合法的数字:\n");
  10.             scanf("%d",&name[i]);
  11.         }
  12.         while(name[i++]>=1&&name[i++]<=9);
  13.        
  14.         printf("结果是:%s\n",name);
  15.        
  16.         return 0;
  17. }
复制代码

用了这个代码,可以满足一位数输入时循环的要求了,但是输入字符,结果就会不输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:32:42 | 显示全部楼层
%s 是字符串格式化,取址的话,数组名就可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-4 10:35:11 | 显示全部楼层
ggsdddup 发表于 2020-8-4 10:32
%s 是字符串格式化,取址的话,数组名就可以
  1. scanf("%s",name);
复制代码

无法做到循环,结果一次性输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:37:28 | 显示全部楼层
本帖最后由 baige 于 2020-8-4 10:42 编辑

用do while会存储到字符
  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]<'0'||name[i]>'9'||i>=49)break; // 当遇到不是0-9或字符数组已满 退出循环
  10.             ++i;
  11.         }
  12.         name[i] = '\0'; // 为数字之后添加字符串结尾'\0'
  13.         printf("结果是:%s\n",name);
  14.         
  15.         return 0;
  16. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:38:03 | 显示全部楼层
你倒是说说你的代码要干嘛啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:38:42 | 显示全部楼层
122Ml 发表于 2020-8-4 10:31
用了这个代码,可以满足一位数输入时循环的要求了,但是输入字符,结果就会不输出

因为输入完字符按下回车(\n)时,程序会把 \n 也当成输入的字符,得想个办法把(\n)去掉

现在这个程序可以做到一起输入了
  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", &name[i]);
  10.     } while (name[temp = i++] >= '1' && name[temp] <= '9');
  11.     name[i] = '\0';

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

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

使用道具 举报

 楼主| 发表于 2020-8-4 10:39:05 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-8-4 10:38
你倒是说说你的代码要干嘛啊

输入整数存储到字符串中,遇到字符结束循环。只存储整数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:40:35 | 显示全部楼层
liuzhengyuan 发表于 2020-8-4 10:38
因为输入完字符按下回车(\n)时,程序会把 \n 也当成输入的字符,得想个办法把(\n)去掉

...

他是遇到字符退出循环,你这个程序字符也会存储,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:41:18 | 显示全部楼层
baige 发表于 2020-8-4 10:40
他是遇到字符退出循环,你这个程序字符也会存储,


所以我加了一个 name[ i] = '\0' 想要取消掉字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-4 10:41:27 | 显示全部楼层
都绝望了,各种代码不是直接输出,就是不输出,或者输出乱码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:43:53 | 显示全部楼层
122Ml 发表于 2020-8-4 10:41
都绝望了,各种代码不是直接输出,就是不输出,或者输出乱码

这个终于正常点了,但是还是有 BUG,还在调试中……
  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:44:00 | 显示全部楼层
liuzhengyuan 发表于 2020-8-4 10:41
所以我加了一个 name[ i] = '\0' 想要取消掉字符

例如输入123a你的代码输出123a
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:44:44 | 显示全部楼层
  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]<'0'||name[i]>'9'||i>=49)break; // 当遇到不是0-9或字符数组已满 退出循环
  10.             ++i;
  11.         }
  12.         name[i] = '\0'; // 为数字之后添加字符串结尾'\0'
  13.         printf("结果是:%s\n",name);
  14.         
  15.         return 0;
  16. }
复制代码

楼主这个可以运行吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 10:45:04 | 显示全部楼层
baige 发表于 2020-8-4 10:44
例如输入123a你的代码输出123a

我在楼上修改了一下……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-4 10:47:30 | 显示全部楼层
baige 发表于 2020-8-4 10:44
楼主这个可以运行吗

一次性程序,输入1,直接结束循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 03:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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