scanf连续读取字符串
注意逗号处理,除第一个单词以外,每个单词前都有逗号
#include <stdio.h>
#include <string.h>
int main() {
char s[100];
int flag = 1; // 使用 1 表示第一个单词
while (scanf("%s", s) == 1) {
if (flag) {
flag = 0;
printf("%lu", strlen(s));
} else {
printf(",%lu", strlen(s));
}
}
return 0;
}
该题还可以读入一整行后做处理
读取一整行
可选用函数有fgets,gets,和scanf("%[^\n]",s)三种
scanf("%[^\n]", str) 和 gets(str) 都可以用来读取一行字符串,但它们之间有以下区别:
安全性:scanf 函数在处理字符串时存在潜在的缓冲区溢出问题,因为它没有指定最大输入长度。如果输入的字符串超过了目标数组的大小,就会导致缓冲区溢出。而 gets 函数更不安全,因为它没有提供字符数目的限制,可能导致更严重的内存溢出问题。而fgets最安全但会读取末尾的换行符,造成最后一个数字在编译器上测试时可能会大1,而在洛谷ide交题无碍。
指针
#include <