鱼C论坛

 找回密码
 立即注册
查看: 1301|回复: 7

[已解决]程序怎么循环起来执行??

[复制链接]
发表于 2020-3-8 14:11:29 | 显示全部楼层 |阅读模式

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

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

x
int main(int argc, char *argv[]){
        char ch[100],c;
        int i,flag=1;
        while(flag){                                           //这个while循环在,输入Y后怎么下面不让输入新的字符串了??
        printf("请输入一个字符串:\n");
        i=0;
        while((c=getchar())!='\n'){
                ch[i]=c;
                i++;
        }
        ch[i]='\0';
        printf("%s\n",ch);
        for(i=0;ch[i]!='\0';i++){
                if(ch[i]>='A'&&ch[i]<='Z') ch[i]=26-(ch[i]-'A'+1)+'A';
                else if(ch[i]>='a'&&ch[i]<='z') ch[i]=26-(ch[i]-'a'+1)+'a';
        }
        printf("转换结果为:\n");
        printf("%s\n",ch);
        printf("continue or not(Y/N)?:\n");
        c=getchar();
        if(c=='n'||c=='N')
        flag=0;
}
        return 0;
}



最佳答案
2020-3-8 17:10:08
要把输入缓冲buffer里面的数据清干净,下面的程序是修改之后的,可以解决你的问题。请注意fflush的使用

#include <stdio.h>

int main(int argc, char *argv[]){
        char ch[100],c;
        int i,flag=1;
        while(flag){                                           //这个while循环在,输入Y后怎么下面不让输入新的字符串了??
                        printf("请输入一个字符串:");
                        i=0;
                        fflush(stdin);
                        while((c=getchar())!='\n'){
                                        ch[i]=c;
                                        i++;
                        }
                        ch[i]='\0';
                        printf("%s\n",ch);
                        for(i=0;ch[i]!='\0';i++){
                                        if(ch[i]>='A'&&ch[i]<='Z') ch[i]=26-(ch[i]-'A'+1)+'A';
                                        else if(ch[i]>='a'&&ch[i]<='z') ch[i]=26-(ch[i]-'a'+1)+'a';
                        }
                        printf("转换结果为:\n");
                        printf("%s\n",ch);
                        printf("continue or not(Y/N)?:");
                        c=getchar();
                        if(c=='n'||c=='N')
                        flag=0;
                }
        return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-8 14:17:30 | 显示全部楼层
当执行完"continue or not(Y/N)?:\n语句后,不让输入字符串,直接出结果了。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-8 14:30:34 | 显示全部楼层
用scanf呗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-8 14:53:19 | 显示全部楼层

效果和getchar一样。第二次循环时还是不行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-8 15:08:06 | 显示全部楼层
雪枫2020 发表于 2020-3-8 14:53
效果和getchar一样。第二次循环时还是不行

给你i简单改了改,
你要实在不行就把询问的跳过去吧,把条件放在输入的地方
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main(void){
  4.         char ch[100],c;
  5.         int i,flag=1;
  6.         while(flag){                                           //这个while循环在,输入Y后怎么下面不让输入新的字符串了??
  7.                 Begin:printf("请输入一个字符串:\n");
  8.                 i=0;
  9.                 scanf("%s", ch);
  10.                 printf("%s\n",ch);
  11.                 for(i=0;ch[i]!='\0';i++){
  12.                     if(ch[i]>='A'&&ch[i]<='Z') ch[i]=26-(ch[i]-'A'+1)+'A';
  13.                     else if(ch[i]>='a'&&ch[i]<='z') ch[i]=26-(ch[i]-'a'+1)+'a';
  14.                 }
  15.                 printf("转换结果为:\n");
  16.                 printf("%s\n",ch);
  17.                 printf("continue or not(Y/N)?\n");
  18.                     getchar()
  19.                                 ;
  20.                 if(c=='n'|| c=='N')
  21.                         flag = 0;
  22.                 else
  23.                         goto Begin;
  24. }
  25.          return 0;
  26. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-8 15:28:04 | 显示全部楼层
qiuyouzhi 发表于 2020-3-8 15:08
给你i简单改了改,
你要实在不行就把询问的跳过去吧,把条件放在输入的地方

还是不行,但是我在询问语句中getchar和scanf同时用就用可以了,,不懂问什么??你编译上面的代码时正常吗?我的编译器是DEV-C++
int main(int argc, char *argv[]){
        char ch[100],c;
        int i,flag=1;
        while(flag){
        begin:printf("请输入一个字符串:\n");
        i=0;
        scanf("%s",ch);
        printf("%s\n",ch);
        for(i=0;ch[i]!='\0';i++){
                if(ch[i]>='A'&&ch[i]<='Z') ch[i]=26-(ch[i]-'A'+1)+'A';
                else if(ch[i]>='a'&&ch[i]<='z') ch[i]=26-(ch[i]-'a'+1)+'a';
        }
        printf("转换结果为:\n");
        printf("%s\n",ch);
        printf("continue or not(Y/N)?:\n");
        c=getchar();
        scanf("%c",&c);
        if(c=='n'||c=='N')
        flag=0;
}
        return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-8 16:28:41 | 显示全部楼层
  1. #include <stdio.h>

  2. int main(int argc, char *argv[])
  3. {
  4.     char ch[100], c;
  5.     int i, flag = 1;
  6.     while (flag)
  7.     {
  8.         //这个while循环在,输入Y后怎么下面不让输入新的字符串了??
  9.         printf("请输入一个字符串:\n");
  10.         i = 0;
  11.         while ((c = getchar()) != '\n')
  12.         {
  13.             ch[i] = c;
  14.             i++;
  15.         }
  16.         ch[i] = '\0';
  17.         printf("%s\n", ch);
  18.         for (i = 0; ch[i] != '\0'; i++)
  19.         {
  20.             if (ch[i] >= 'A' && ch[i] <= 'Z')
  21.                 ch[i] = 26 - (ch[i] - 'A' + 1) + 'A';
  22.             else if (ch[i] >= 'a' && ch[i] <= 'z')
  23.                 ch[i] = 26 - (ch[i] - 'a' + 1) + 'a';
  24.         }
  25.         printf("转换结果为:\n");
  26.         printf("%s\n", ch);
  27.         printf("continue or not(Y/N)?:\n");
  28.         c = getchar();
  29.         getchar(); //加入一个getchar()将你输入Y的时候按得那个回车符读取并丢弃掉,不然那个回车会被内层while中的getchar()读取到,相当于你输入了一个空的字符串
  30.         if (c == 'n' || c == 'N')
  31.             flag = 0;
  32.     }
  33.     return 0;
  34. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-8 17:10:08 | 显示全部楼层    本楼为最佳答案   
要把输入缓冲buffer里面的数据清干净,下面的程序是修改之后的,可以解决你的问题。请注意fflush的使用

#include <stdio.h>

int main(int argc, char *argv[]){
        char ch[100],c;
        int i,flag=1;
        while(flag){                                           //这个while循环在,输入Y后怎么下面不让输入新的字符串了??
                        printf("请输入一个字符串:");
                        i=0;
                        fflush(stdin);
                        while((c=getchar())!='\n'){
                                        ch[i]=c;
                                        i++;
                        }
                        ch[i]='\0';
                        printf("%s\n",ch);
                        for(i=0;ch[i]!='\0';i++){
                                        if(ch[i]>='A'&&ch[i]<='Z') ch[i]=26-(ch[i]-'A'+1)+'A';
                                        else if(ch[i]>='a'&&ch[i]<='z') ch[i]=26-(ch[i]-'a'+1)+'a';
                        }
                        printf("转换结果为:\n");
                        printf("%s\n",ch);
                        printf("continue or not(Y/N)?:");
                        c=getchar();
                        if(c=='n'||c=='N')
                        flag=0;
                }
        return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-7 19:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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