llxjh 发表于 2020-6-4 10:54:31

我这有个代码在dev里运行输出不起来,在vs code里可以是为什么

/*从输入中获取n个字符,在读到第一个空白、制表符、换行符停止*/
#include <stdio.h>
#define SIZE 81
char * q(char *a,int n);
int main(void){
        char a;
        int n;
        scanf("%d",&n);
        q(a,n);
        puts(a);
        return 0;
}
char * q(char *a,int n){
        char *b;
        b=a;
        for(;a<a+n;a++){
                *a=getchar();
                if(*a==' '||*a=='\n'||*a=='\t'||*a=='\0')
                        break;
        }
        *a=0;
        return b;
}
这行代码在dev里输出不出结果,只输出一个换行符。在vs code里输出有用,不知道为什么,问下哪个才是对的。

sunrise085 发表于 2020-6-4 11:29:58

scanf之后缓冲区剩下一个回车字符,需要清除 否则影响后面的getchar函数读取
程序还有点小毛病,帮你修改了。
/*从输入中获取n个字符,在读到第一个空白、制表符、换行符停止*/
#include <stdio.h>
#define SIZE 81
void q(char *a,int n);
int main(void){
      char a;
      int n;
      scanf("%d",&n);
      q(a,n);
      puts(a);
      return 0;
}
void q(char *a,int n){
      char *b;
      b=a;
      getchar();//这里需要加一句,清除scanf剩余的回车字符,否则一进入循环就退出了。
      for(;a<b+n;a++){
                *a=getchar();
                if(*a==' '||*a=='\n'||*a=='\t'||*a=='\0')
                        break;
      }
      *a='\0';
      a=b;
}
页: [1]
查看完整版本: 我这有个代码在dev里运行输出不起来,在vs code里可以是为什么