c - 如何将名字和姓氏作为一个并打印在文件中?
问题描述
在这段代码中,我面临一个问题,即每当我尝试输入first
和last
名称时,它只会在文件中打印first
名称。但我也想打印last
名字。不应删除两个单词之间的空格。相反,第一个和最后一个应该被视为一个。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
FILE *fp = fopen("new.csv", "w");
char name[50];
printf("Enter your name: ");
scanf("%s", name);
fprintf(fp, "%s", name);
fclose(fp);
return 0;
}
解决方案
如果您使用%s
,fscanf
请阅读直到出现空白字符,在名字之后停止。
如果该行没有其他内容,例如在用户按下之前Enter,您可以使用fgets
阅读整行。那里的参数是文件流,指向字符数组的指针及其大小:
char name[50];
fgets(stdin, name, sizeof(name));
如果你仍然想使用 scanf,你也可以使用%[^\n]
而不是这里%s
提到的:
char name[50];
scanf("%49[^\n]", name);
为了防止缓冲区溢出,您应该scanf
只使用缓冲区大小减去直接写入之后的一%
(定义最大字段宽度)。
如果名字和姓氏之后的行中还有其他数据,您可以将它们单独读取并在之后将它们放在一起:
#include <stdio.h>
int main() {
char firstName[50];
char lastName[50];
scanf("%49s %49s", firstName, lastName);
char name[50];
snprintf(name, sizeof(name), "%s %s", firstName, lastName);
printf("%s\n", name);
}
推荐阅读
- c# - 为什么不等待这种方法?
- python - 如何仅删除 csv 的一行并将更改保存在同一个 csv 中?[Python]
- python - 压缩中for循环期间的输入
- ios - UIView 添加为 AVPlayer 中的 Overlay 触摸时不会触发任何操作
- r - ROracle dbGetQuery/dbSendQuery 如何处理多个绑定参数
- python - 无法在 Python 中导入模块?
- html - 如何使用 React 从打字稿中的对象创建 HTML 元素
- reactjs - Redux 存储在向我的 reducer 发送操作后不更新
- java - 对不同类型的对象具有相同验证规则的 Java 设计类
- javascript - 如何展平嵌套对象?