如何以与输入类似的方式打印输出?

时间:2016-08-24 09:58:35

标签: c

#include<stdio.h>
int main() {
    int index=0;
    char str[1000];
    char c;
    while((c=getchar())!='/')  {
       while((c=getchar())!='\n') {
          scanf("%c",&str[index]);
          index++;
       }
       str[index]='\n';
       index++;
    }
    str[index]='\0';
    printf("%s",str);
    return 0;
}

我以多行的形式提供输入,我想以与提供的输入类似的方式显示输出,我正在使用&#39; /&#39;字符作为输入的结束,现在我没有得到输出,如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

stdin中读取字符时,如果您要终止'/'上的读取,则有三个条件可以防范:

  1. index + 1 < 1000(以防止超出并保留空间 nul-terminatedating char)
  2. (c = getchar()) != '/'(您选择的终结者);和
  3. c != EOF(您不希望在设置EOF后阅读 流)
  4. 将这些部分放在一起,您可以这样做:

    #include <stdio.h>
    
    #define MAXC 1000   /* define a constant (macro) for max chars */
    
    int main (void) {
    
        int c, idx = 0;
        char str[MAXC] = "";    /* initialize your array (good practice) */
    
        /* read each char up to MAXC (-2) chars, stop on '/' or EOF */
        while (idx + 1 < MAXC && (c = getchar()) != '/' && c != EOF)
            str[idx++] = c; /* add to str */
    
        str[idx] = 0; /* nul-terminate (optional here if array initialized, why?) */
    
        printf ("%s", str);
    
        return 0;
    }
    

    (我会鼓励在putchar ('\n');之后printf(或者只是将'\n'添加到格式字符串)以防止输入而没有最终的POSIX 行尾,例如,如果在'/'停止,或者到达1000个字符,或者从不包含POSIX EOL的重定向文件中读取)

    示例输入文件

    $ cat ../dat/captnjack.txt
    This is a tale
    Of Captain Jack Sparrow
    A Pirate So Brave
    On the Seven Seas.
    

    示例使用/输出

    $ ./bin/getchar_io <../dat/captnjack.txt
    This is a tale
    Of Captain Jack Sparrow
    A Pirate So Brave
    On the Seven Seas.
    

    仔细看看,如果您有任何问题,请告诉我。

答案 1 :(得分:1)

为什么不用这个? :

#include <stdio.h>
int main() {
int index=0;
char str[1000];
char c;
while((c=getchar())!='/')  {
  str[index] = c;
  index++;
}
str[index]='\0';
printf("%s",str);
return 0;
}