所以我是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作为编译器。
答案 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;
}
<强>注:强>