我试图从命令行重复读取一个字符串并将其打印到文件中。这是我的代码:
int main ()
{
FILE* fp=fopen("test.txt","w");
char* tofile[10];
while(1){
printf("cat: ");
scanf("%s",tofile);
fprintf(fp,"%s\n",tofile);
}
return 0;
}
它在循环外工作得很好。但在内部,它只是不打印。
fprintf函数返回必须打印的正确字符数。
注意:我知道那里有similar question out there,但它还没有得到解答,我希望我的代码可以帮助解决这个问题,因为它更简单。
答案 0 :(得分:2)
首先,似乎你想要的是在命令行上阅读。 命令行在执行程序时正确编写的内容,例如:
./main things that are on the command line
您想要做的是阅读标准输入。
您应该考虑使用fgets
函数,因为它具有要读取的字符数限制,因此您可以“安全地”将它们存储到缓冲区中,例如tofile
。
如果您想阅读标准输入,可以使用stdin
流(这是为每个程序自动创建的文件*)
该行
fgets(tofile, 10, stdin);
你的循环变为:
while (fgets(tofile, 10, stdin) != NULL) {
printf("cat: ");
fprintf(fp, "%s\n", tofile);
}
含义:只要我们可以阅读标准输入,打印“cat:”并将我们刚刚读取的内容存储在由流指针fp
控制的文件中。
当您尝试打开流时,它可能会失败,您应该对其进行测试:
char filename[] = "test.txt";
FILE *fp = fopen(filename, "w");
if (fp == NULL) {
fprintf(stderr, "Failed to open the file of name : %s", filename);
return EXIT_FAILURE;
}
在退出main之前,您还应该关闭文件并检查文件是否成功,例如:
if (fclose(fp) != 0) {
fprintf(stderr, "Failed to close the file of name : %s", filename);
return EXIT_FAILURE;
}
整个事情变成了:
#include <stdio.h>
#include <stdlib.h>
int main (void) {
char filename[] = "test.txt";
FILE *fp = fopen(filename, "w");
if (fp == NULL) {
fprintf(stderr, "Failed to open the file of name : %s", filename);
return EXIT_FAILURE;
}
char tofile[10];
printf("cat: ");
while (fgets(tofile, 10, stdin) != NULL) {
printf("cat: ");
fprintf(fp, "%s\n", tofile);
}
if (fclose(fp) != 0) {
fprintf(stderr, "Failed to close the file of name : %s", filename);
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
我不知道这只是一个小程序,还是渴望成为一个更大的计划。 在最后一种情况下,您应该考虑使用定义,而不是像
这样的神奇数字#define BUFFER_MAX_SIZE 10
char tofile[BUFFER_MAX_SIZE];
while (fgets(tofile, BUFFER_MAX_SIZE, stdin) != NULL) { ... }
这有助于提高可读性,并使程序在修改此类大小时不易调试。因为使用定义,所有需要大小的代码部分仍然可以完全正常运行而无需修改它们。
请记住,tofile
充当缓冲区,它实际上是一个很容易溢出的小缓冲区。
答案 1 :(得分:0)
这会奏效。 fgets()
返回它从指定文件指针读取的字符串。如果此字符串仅返回换行符(“\ n”),则表示在word_pairs <- austen_section_words %>%
pairwise_count(word, section, sort = TRUE)
word_pairs
#> # A tibble: 796,008 x 3
#> item1 item2 n
#> <chr> <chr> <dbl>
#> 1 darcy elizabeth 144
#> 2 elizabeth darcy 144
#> 3 miss elizabeth 110
#> 4 elizabeth miss 110
#> 5 elizabeth jane 106
#> 6 jane elizabeth 106
#> 7 miss darcy 92.0
#> 8 darcy miss 92.0
#> 9 elizabeth bingley 91.0
#> 10 bingley elizabeth 91.0
#> # ... with 795,998 more rows
word_pairs <- austen_section_words %>%
pairwise_count(word, document, sort = TRUE)
word_pairs
#> # A tibble: 36,078,042 x 3
#> item1 item2 n
#> <chr> <chr> <dbl>
#> 1 universally truth 1.00
#> 2 acknowledged truth 1.00
#> 3 single truth 1.00
#> 4 possession truth 1.00
#> 5 fortune truth 1.00
#> 6 wife truth 1.00
#> 7 feelings truth 1.00
#> 8 views truth 1.00
#> 9 entering truth 1.00
#> 10 neighbourhood truth 1.00
#> # ... with 36,078,032 more rows
处未输入任何内容。
stdin
已编辑的代码。