雪枫2020 发表于 2020-3-8 14:11:29

程序怎么循环起来执行??

int main(int argc, char *argv[]){
        char ch,c;
        int i,flag=1;
        while(flag){                                           //这个while循环在,输入Y后怎么下面不让输入新的字符串了??
        printf("请输入一个字符串:\n");
        i=0;
        while((c=getchar())!='\n'){
                ch=c;
                i++;
        }
        ch='\0';
        printf("%s\n",ch);
        for(i=0;ch!='\0';i++){
                if(ch>='A'&&ch<='Z') ch=26-(ch-'A'+1)+'A';
                else if(ch>='a'&&ch<='z') ch=26-(ch-'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 发表于 2020-3-8 14:17:30

当执行完"continue or not(Y/N)?:\n语句后,不让输入字符串,直接出结果了。。

qiuyouzhi 发表于 2020-3-8 14:30:34

用scanf呗

雪枫2020 发表于 2020-3-8 14:53:19

qiuyouzhi 发表于 2020-3-8 14:30
用scanf呗

效果和getchar一样。第二次循环时还是不行

qiuyouzhi 发表于 2020-3-8 15:08:06

雪枫2020 发表于 2020-3-8 14:53
效果和getchar一样。第二次循环时还是不行

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

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

雪枫2020 发表于 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,c;
        int i,flag=1;
        while(flag){
        begin:printf("请输入一个字符串:\n");
        i=0;
        scanf("%s",ch);
        printf("%s\n",ch);
        for(i=0;ch!='\0';i++){
                if(ch>='A'&&ch<='Z') ch=26-(ch-'A'+1)+'A';
                else if(ch>='a'&&ch<='z') ch=26-(ch-'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;
}

major_lyu 发表于 2020-3-8 16:28:41

#include <stdio.h>

int main(int argc, char *argv[])
{
    char ch, c;
    int i, flag = 1;
    while (flag)
    {
      //这个while循环在,输入Y后怎么下面不让输入新的字符串了??
      printf("请输入一个字符串:\n");
      i = 0;
      while ((c = getchar()) != '\n')
      {
            ch = c;
            i++;
      }
      ch = '\0';
      printf("%s\n", ch);
      for (i = 0; ch != '\0'; i++)
      {
            if (ch >= 'A' && ch <= 'Z')
                ch = 26 - (ch - 'A' + 1) + 'A';
            else if (ch >= 'a' && ch <= 'z')
                ch = 26 - (ch - 'a' + 1) + 'a';
      }
      printf("转换结果为:\n");
      printf("%s\n", ch);
      printf("continue or not(Y/N)?:\n");
      c = getchar();
      getchar(); //加入一个getchar()将你输入Y的时候按得那个回车符读取并丢弃掉,不然那个回车会被内层while中的getchar()读取到,相当于你输入了一个空的字符串
      if (c == 'n' || c == 'N')
            flag = 0;
    }
    return 0;
}

alexw_h264 发表于 2020-3-8 17:10:08

要把输入缓冲buffer里面的数据清干净,下面的程序是修改之后的,可以解决你的问题。请注意fflush的使用

#include <stdio.h>

int main(int argc, char *argv[]){
      char ch,c;
      int i,flag=1;
      while(flag){                                           //这个while循环在,输入Y后怎么下面不让输入新的字符串了??
                        printf("请输入一个字符串:");
                        i=0;
                        fflush(stdin);
                        while((c=getchar())!='\n'){
                                        ch=c;
                                        i++;
                        }
                        ch='\0';
                        printf("%s\n",ch);
                        for(i=0;ch!='\0';i++){
                                        if(ch>='A'&&ch<='Z') ch=26-(ch-'A'+1)+'A';
                                        else if(ch>='a'&&ch<='z') ch=26-(ch-'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;
}
页: [1]
查看完整版本: 程序怎么循环起来执行??