122Ml 发表于 2020-8-4 10:19:43

字符串结果输出异常

#include <stdio.h>

int main()
{
        char name;
        int i=0;
       
        do
    {
            printf("请输入合法的数字:\n");
            scanf("%s",&name);
        }
        while(name[++i]>=1&&name[++i]<=9);
       
        printf("结果是:%s\n",name);
       
        return 0;
}
输入整数存储到字符串中,遇到字符结束循环。
我输入两位数时,直接跳转到结果:如输入4,结果4;
输入两位数,正常运行,但再次输入一位整数,跳转结果:如输入47,48,1,输出47481。
求助,在输入一位整数时不跳转结果。

liuzhengyuan 发表于 2020-8-4 10:21:14

本帖最后由 liuzhengyuan 于 2020-8-4 10:23 编辑

#include <stdio.h>

int main()
{
    char name;
    int i = 0;

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

    printf("结果是:%c\n", name);

    return 0;
}

122Ml 发表于 2020-8-4 10:23:00

liuzhengyuan 发表于 2020-8-4 10:21
试试?

emmmmmm照例跳转,后面还赠送了个乱码

liuzhengyuan 发表于 2020-8-4 10:24:30

122Ml 发表于 2020-8-4 10:23
emmmmmm照例跳转,后面还赠送了个乱码

这样?
#include <stdio.h>

int main()
{
    char name;
    int i = 0;

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

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

    return 0;
}

122Ml 发表于 2020-8-4 10:24:59

liuzhengyuan 发表于 2020-8-4 10:21


这次连结果都不输出了.......

122Ml 发表于 2020-8-4 10:31:42

liuzhengyuan 发表于 2020-8-4 10:24
这样?

#include <stdio.h>

int main()
{
        char name;
        int i=0;
       
        do
    {
            printf("请输入合法的数字:\n");
            scanf("%d",&name);
        }
        while(name>=1&&name<=9);
       
        printf("结果是:%s\n",name);
       
        return 0;
}
用了这个代码,可以满足一位数输入时循环的要求了,但是输入字符,结果就会不输出

ggsdddup 发表于 2020-8-4 10:32:42

%s 是字符串格式化,取址的话,数组名就可以

122Ml 发表于 2020-8-4 10:35:11

ggsdddup 发表于 2020-8-4 10:32
%s 是字符串格式化,取址的话,数组名就可以

scanf("%s",name);
无法做到循环,结果一次性输出

baige 发表于 2020-8-4 10:37:28

本帖最后由 baige 于 2020-8-4 10:42 编辑

用do while会存储到字符
#include <stdio.h>

int main()
{
      char name;
      int i=0;
      printf("请输入合法的数字:\n");
      while(1){
            scanf("%c",&name);// name 用%c;
            if(name<'0'||name>'9'||i>=49)break; // 当遇到不是0-9或字符数组已满 退出循环
            ++i;
      }
      name = '\0'; // 为数字之后添加字符串结尾'\0'
      printf("结果是:%s\n",name);
      
      return 0;
}

永恒的蓝色梦想 发表于 2020-8-4 10:38:03

你倒是说说你的代码要干嘛啊

liuzhengyuan 发表于 2020-8-4 10:38:42

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

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

现在这个程序可以做到一起输入了
#include <stdio.h>

int main()
{
    char name;
    int i = 0, temp;

    do
    {
      printf("请输入合法的数字:\n");
      scanf("%c", &name);
    } while (name >= '1' && name <= '9');
    name = '\0';

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

    return 0;
}

122Ml 发表于 2020-8-4 10:39:05

永恒的蓝色梦想 发表于 2020-8-4 10:38
你倒是说说你的代码要干嘛啊

输入整数存储到字符串中,遇到字符结束循环。只存储整数

baige 发表于 2020-8-4 10:40:35

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

...

他是遇到字符退出循环,你这个程序字符也会存储,

liuzhengyuan 发表于 2020-8-4 10:41:18

baige 发表于 2020-8-4 10:40
他是遇到字符退出循环,你这个程序字符也会存储,

所以我加了一个 name[ i] = '\0' 想要取消掉字符

122Ml 发表于 2020-8-4 10:41:27

都绝望了,各种代码不是直接输出,就是不输出,或者输出乱码

liuzhengyuan 发表于 2020-8-4 10:43:53

122Ml 发表于 2020-8-4 10:41
都绝望了,各种代码不是直接输出,就是不输出,或者输出乱码

这个终于正常点了,但是还是有 BUG,还在调试中……
#include <stdio.h>

int main()
{
    char name;
    int i = 0, temp;

    do
    {
      printf("请输入合法的数字:\n");
      scanf("%c\n", &name);
    } while (name >= '1' && name <= '9');
    name = '\0';

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

    return 0;
}

baige 发表于 2020-8-4 10:44:00

liuzhengyuan 发表于 2020-8-4 10:41
所以我加了一个 name[ i] = '\0' 想要取消掉字符

例如输入123a你的代码输出123a

baige 发表于 2020-8-4 10:44:44

#include <stdio.h>

int main()
{
      char name;
      int i=0;
      printf("请输入合法的数字:\n");
      while(1){
            scanf("%c",&name);// name 用%c;
            if(name<'0'||name>'9'||i>=49)break; // 当遇到不是0-9或字符数组已满 退出循环
            ++i;
      }
      name = '\0'; // 为数字之后添加字符串结尾'\0'
      printf("结果是:%s\n",name);
      
      return 0;
}
楼主这个可以运行吗

liuzhengyuan 发表于 2020-8-4 10:45:04

baige 发表于 2020-8-4 10:44
例如输入123a你的代码输出123a

我在楼上修改了一下……

122Ml 发表于 2020-8-4 10:47:30

baige 发表于 2020-8-4 10:44
楼主这个可以运行吗

{:10_266:}一次性程序,输入1,直接结束循环
页: [1] 2 3
查看完整版本: 字符串结果输出异常