用C语言while循环解决,输入一个字符串,统计单词数和字符数,不要用fget函数
时间: 2024-03-01 12:51:26 浏览: 63
好的,如果不使用 `fgets` 函数,可以使用 `scanf` 函数来读取输入的字符串,然后使用 while 循环遍历整个字符串,统计单词数和字符数,代码示例如下:
```c
#include <stdio.h>
#include <ctype.h>
int main() {
char str[100];
int i = 0, words = 0, chars = 0;
printf("请输入一个字符串:\n");
scanf("%s", str);
while (str[i] != '\0') {
if (isalpha(str[i])) {
chars++;
if (!isalpha(str[i+1]))
words++;
}
i++;
}
printf("字符串中含有 %d 个单词和 %d 个字符。\n", words, chars);
return 0;
}
```
上面的代码与之前的代码基本相同,主要区别在于读取用户输入的字符串的方式不同。使用 `scanf` 函数时,需要注意输入的字符串中不能包含空格等特殊字符,否则会被当做字符串的结束符。如果需要输入包含空格的字符串,可以使用 `gets` 函数代替 `scanf` 函数。不过需要注意,`gets` 函数是不安全的,因为它无法限制输入的字符串长度,容易导致缓冲区溢出等问题。
相关问题
fget函数
fget函数是一个标准C库函数,用于从文件中读取一行字符。它的原型为:
```c
char *fgets(char *str, int n, FILE *stream);
```
其中,str是一个指向字符数组的指针,用于存储读取的字符;n是读取字符的最大数量;stream是一个指向文件的指针,指定从哪个文件读取字符。
fget函数会读取文件中的一行字符,直到遇到换行符或文件结束符为止。读取到的字符会存储到str指向的字符数组中,直到读取n-1个字符或遇到换行符为止。如果成功读取到字符,则返回str指向的字符数组;否则返回NULL。
将fopen和fget换成linux系统操作函数
如果您想使用Linux系统调用替代`fopen`和`fgets`函数,可以使用`open`和`read`函数来读取文件内容。这里是修改后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
void process_switch_debug_load() {
char *filename = "/vendor/etc/switch_debug.load";
char line[100];
int fd = open(filename, O_RDONLY);
if (fd == -1) {
printf("Failed to open file %s\n", filename);
return;
}
ssize_t bytesRead = read(fd, line, sizeof(line)-1);
if (bytesRead > 0) {
// Remove trailing newline character
line[bytesRead-1] = '\0';
if (strcmp(line, "1") == 0) {
system("stty -F /dev/ttyS0 icanon");
} else {
system("stty -F /dev/ttyS0 -icanon");
}
}
close(fd);
}
int main() {
process_switch_debug_load();
return 0;
}
```
在这个修改后的代码中,我们使用`open`函数打开文件,并指定了只读模式。然后使用`read`函数从文件描述符中读取内容,并将其存储在`line`数组中。之后的逻辑与之前的代码相同。
请注意,这个程序同样需要在有足够权限的环境下运行,以便执行`stty`命令。同时,请确保文件`/vendor/etc/switch_debug.load`存在并且可读。
阅读全文