C echo用户输入

时间:2013-08-08 16:01:28

标签: c

所以我是C编程的初学者(之前我使用过Ruby,Python和Haskell),而且我很难在C中使用最简单的东西(可能是因为所有的手动内存)。无论如何,我想要做的是(使用简单的构造)创建一个脚本,它只是回应用户输入到控制台的内容。

e.g。用户输入hi,控制台打印hi。

这就是我想出的。

另外,我还没有真正掌握指针,所以没有。

// echo C script

int echo();

int main() {

    echo();
    return 0;

}

int echo() {
    char input[500];

    while (1) {
        if (scanf("%[^\n]", input) > 0) {
            printf("%s\n", input);
        }
        input[0] = 0;
    }
    return 1;
}

我意识到这里有一堆不好的做法,比如设置一个巨大的字符串数组,但这只是为了简化它。

无论如何,我的问题是它重复第一个输入然后输入冻结。据我所知,它在while循环期间冻结(1永远不会返回)。

任何帮助都将不胜感激。

哦,并使用TCC作为编译器。

4 个答案:

答案 0 :(得分:3)

您不需要echo的数组

#include <stdio.h>

int main(void)
{
    int c;

    while((c = getchar()) != EOF) putchar(c);
    return 0;
}

答案 1 :(得分:1)

scanf("%[^\n]", input

应该是:

scanf("%s",input)

然后,如果你应该这样做:

memset(input,0,500);

答案 2 :(得分:1)

只要用户可以输入该长度的字符串,就可以分配如此大的字符串。我将用于输入的是fgets(有关更多信息,请阅读this)。在您的情况下正确使用,因为您仍然希望使用大小为500的字符串,将是:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int echo(){
    char input[500];
    while(fgets(input, 500, STDIN)){  //read from STDIN (aka command-line)
        printf("%s\n", input);  //print out what user typed in
        memset(input, 0, strlen(input));  //reset string to all 0's
    }
    return 1;
}

请注意,将500的值更改为任何较小的数字(我通常会按照约定使用2的幂,如512,但这并不重要)将限制用户输入的长度为该数字。另请注意,我没有测试我的代码,但它应该可以工作。

答案 3 :(得分:0)

有很多方法可以完成这项任务,但最简单的方法是一次从stdin读取一个字节,并在处理每个字节时将该字节输出到stdout。

<强>段:

#include <stdio.h>

int main( void ) {
  // Iterates until EOF is sent.
  for ( int byte = getchar(); byte != EOF; byte = getchar() ) {
    // Outputs to stdout the byte.
    putchar( byte );
  }

  return 0;
}

<强>注:

  • 您必须将通过stdin读取的字节存储为整数。这是因为您无法保证char是有符号或无符号的,实际上C中有3种char类型(char,signed char和unsigned char)。包括限制库以确定您的环境中是否签署了字符。
  • 您必须使用C99标准进行编译,否则将字节声明移到for循环之外。