通过fgets实现wc -l功能,c语言
时间: 2024-02-27 18:57:39 浏览: 76
可以通过以下代码实现wc -l功能:
```c
#include <stdio.h>
int main() {
char filename[100];
printf("Enter the name of the file: ");
fgets(filename, 100, stdin);
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("Error opening file!\n");
return 1;
}
int count = 0;
char c;
while ((c = fgetc(fp)) != EOF) {
if (c == '\n') {
count++;
}
}
fclose(fp);
printf("Number of lines in %s is %d.\n", filename, count);
return 0;
}
```
这段代码首先通过fgets函数从标准输入读取文件名,然后使用fopen函数打开文件。如果文件打开失败,程序会输出错误信息并退出。接下来,程序使用fgetc函数逐个读取文件中的字符,如果遇到换行符就将计数器加一。最后,程序输出文件的行数并关闭文件。
相关问题
编写c语言,使用fgets函数输入fgets输出以实现wc -w命令
好的,这是一个可以帮助你实现统计文件单词数量的C语言程序示例:
```c
#include <stdio.h>
#include <string.h>
int main()
{
char file_name[100];
char buffer[1024];
int words = 0;
FILE *fp;
printf("请输入文件名:");
fgets(file_name, 100, stdin);
// 删除文件名中的换行符
file_name[strcspn(file_name, "\n")] = 0;
fp = fopen(file_name,"r");
if (fp == NULL)
{
printf("无法打开文件:'%s' \n", file_name);
return 0;
}
while (fgets(buffer, 1024, fp))
{
// 统计当前行的单词数量
int i = 0, len = strlen(buffer);
while (i < len)
{
// 跳过开头的空格
while (i < len && buffer[i] == ' ') i++;
// 如果达到字符串结尾,退出循环
if (i == len) break;
// 统计一个单词
words++;
// 移动到下一个空格
while (i < len && buffer[i] != ' ') i++;
}
}
fclose(fp);
printf("文件'%s'中的单词数量:%d \n", file_name, words);
return 0;
}
```
你可以通过调用`fgets()`函数来获取用户输入的文件名,然后通过`fopen()`函数打开这个文件读取其中的内容。在读取文件时,每次使用`fgets()`函数可以从文件中获取一行文本。然后你可以遍历该行字符,统计其中的单词数量,并累计到总单词数量中。最后输出即可。
请注意:在编写实际的命令行程序时,需要实现很多错误处理和边界处理逻辑,并进行大量的测试以确保程序的正确性。以上示例只是为了说明如何通过`fgets()`来实现文件输入输出。
将实数写入文件(以特殊数值-1 结束C语言
好的,以下是 C 语言代码示例,可以将实数写入文件并以特殊数值-1结束:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_LEN 1024
int main() {
char filename[] = "numbers.txt";
FILE *f = fopen(filename, "w");
if (f == NULL) {
fprintf(stderr, "无法打开文件 %s\n", filename);
exit(1);
}
char input[MAX_LEN];
double num;
while (1) {
printf("请输入实数(输入-1结束):");
fgets(input, MAX_LEN, stdin);
sscanf(input, "%lf", &num);
if (num == -1) {
fprintf(f, "-1");
break;
} else if (feof(stdin) || ferror(stdin) || isnan(num)) {
printf("请输入正确的实数!\n");
continue;
}
fprintf(f, "%.2f\n", num);
}
fclose(f);
return 0;
}
```
程序先打开了一个文件流,然后通过循环不断读入用户输入的实数,并将其写入文件中,直到输入-1为止。如果输入的不是实数,则会提示您重新输入。需要注意的是,本示例代码将实数按照保留两位小数的格式写入文件中,如果需要更改精度,可以修改 `fprintf` 函数的格式化字符串。