baige 发表于 2020-8-4 10:48:17

liuzhengyuan 发表于 2020-8-4 10:45
我在楼上修改了一下……

你的程序scanf()里多了个\n

liuzhengyuan 发表于 2020-8-4 10:48:51

122Ml 发表于 2020-8-4 10:47
一次性程序,输入1,直接结束循环

这样呢?
#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:49:38

122Ml 发表于 2020-8-4 10:47
一次性程序,输入1,直接结束循环

是要让他过滤空格和换行吗

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

baige 发表于 2020-8-4 10:48
你的程序scanf()里多了个\n

就是要多 \n,不然会多读

baige 发表于 2020-8-4 10:50:41

liuzhengyuan 发表于 2020-8-4 10:49
就是要多 \n,不然会多读

scanf()里面\n是错误的要让他换行结束多加一个\

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

{:10_266:}{:10_275:}程序能用,就是...
请输入合法的数字:
2
3
请输入合法的数字:
4
请输入合法的数字:
5
请输入合法的数字:
i
请输入合法的数字:
7
结果是:2345

--------------------------------
Process exited after 7.376 seconds with return value 0
请按任意键继续. . .

baige 发表于 2020-8-4 10:52:02

#include <stdio.h>

int main()
{
      char name;
      int i=0;
      printf("请输入合法的数字:\n");
      while(1){
            scanf("%c",&name);// name 用%c;
          if(name==' '||name=='\t'||name=='\n')continue;
            else 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:54:07

baige 发表于 2020-8-4 10:50
scanf()里面\n是错误的要让他换行结束多加一个\

我 VS 调试过了,使用 scanf 输入时会把 \n 也读进去,加个 \n 让它和用户输入的重叠

122Ml 发表于 2020-8-4 10:54:22

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


{:10_275:}可以运行了

baige 发表于 2020-8-4 10:55:04

122Ml 发表于 2020-8-4 10:54
可以运行了

只有遇到不是数字,空格,tab,和换行或字符数组已满时程序才会结束循环

巴巴鲁 发表于 2020-8-4 10:55:22

本帖最后由 巴巴鲁 于 2020-8-4 11:07 编辑

#include <stdio.h>
int main()
{
      char name;
      int i = 0;
      char ch;
      
      for(i= 0; i < 49; i++) // 最多输入49个0~9的数,最后赋值给'\0'
      {
              printf("请输入合法的整数:\n");
              ch = getchar();
              getchar(); // 用来缓冲输入的回车
              if(ch >= '0' && ch <= '9')
              {
                      name = ch;
              }
              else
              {
                      break;
              }
      }
      name = '\0';
      
      printf("结果是:%s\n",name);
      return 0;
}
不过输入的只能是0~9的数,如果输入两位整数,结果就不对了,不知道符不符合

122Ml 发表于 2020-8-4 10:57:56

巴巴鲁 发表于 2020-8-4 10:55
不过输入的只能是0~9的数,如果输入两位整数,结果就不对了,不知道符不符合

{:10_275:}233完美,0到9够用了

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

122Ml 发表于 2020-8-4 10:39
输入整数存储到字符串中,遇到字符结束循环。只存储整数

您描述的可真草率

liuzhengyuan 发表于 2020-8-4 10:58:57

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

这个方法厉害{:10_275:}

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

永恒的蓝色梦想 发表于 2020-8-4 10:58
您描述的可真草率

......

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

永恒的蓝色梦想 发表于 2020-8-4 10:58
您描述的可真草率

下次会注意的

巴巴鲁 发表于 2020-8-4 11:03:26

122Ml 发表于 2020-8-4 10:57
233完美,0到9够用了

如果可以,设个最佳吧{:10_256:}

巴巴鲁 发表于 2020-8-4 11:06:37

122Ml 发表于 2020-8-4 10:57
233完美,0到9够用了

还是不太对,循环那里i<49,要给'\0'留一个位置,我改一下{:10_264:}

ggsdddup 发表于 2020-8-4 15:44:55

数组中如果都是数字,是不可能通过%s输出到屏幕的,只能通过循环将数组中的每个元素显示到屏幕中。

ggsdddup 发表于 2020-8-4 16:01:03

#include <stdio.h>


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

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

        //打印数组
        puts("结果是:");
        i=0;
        while (name != '\0')
                printf("%d ", name);
        puts("");
    return 0;
}
页: 1 [2] 3
查看完整版本: 字符串结果输出异常