- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个用 C 语言编写的小程序,它以一个菜单开始,该菜单在一个带有 do{switch{case 1....}while
循环的函数中实现
当案例 1 验证时,它调用另一个函数,其中 while 循环获取 getchar()
值并使用 fputc()
将它们写入文件。问题是它会跳过所有其他字符。
有什么技巧吗?
这样我的 do{} while
菜单及其 switch case 可以与承载我的 while 循环和 fputc()
方法的独立函数共存?
这里是代码的简化版本......
#include<stdio.h>
#include<stdlib.h>
int menu();
int v1();
int main(void) {
menu();
return 0;
}
int menu() {
int opt;
do {
printf("\t 1] v1 \n");
switch (opt) {
case 1:
v1();
}
scanf("%i", &opt);
} while (opt != 100);
return 0;
}
int v1() {
FILE *fd;
char target[10] = "v1.json";
fd = fopen(target, "at");
if (fd == NULL) {
printf("Error");
}
int c;
while ((c = getchar()) != EOF && (c = getchar()) != '\n') {
fputc(c, fd);
}
fclose(fd);
return 0;
}
最佳答案
行内
while ((c = getchar()) != EOF && (c = getchar()) != '\n') { ... }
您正在从stdin
中读取两个 个字符,而不是一个——因为您调用了两次getchar()
。
为了解决这个问题,因为您已经将读取的 char
分配给了变量 c
,所以只需在第二次比较中使用该变量,而不是调用函数一次更多:
while ((c = getchar()) != EOF && c != '\n') { ... }
关于c - 为什么 fputc() 会跳过所有其他字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51713710/
大多数 fputc 的 C 文件编写示例使用非常基本的示例,很少或没有过程错误检查。 我应该将哪些错误检查技术和函数与 fputc 循环结合使用以确保 fputc 已成功写入文件?我应该如何使用它们?
我在编写的程序中看到了一些我无法真正解释的奇怪行为,我想知道是否有人可以向我解释这里发生的事情。我感觉这是由 g++ 与 -O3 一起使用的一些高级优化技术引起的,但我不确定。 我正在运行类似的东西(
我正在使用 fputc(在 C/C++ 中)将一些数据输出到文件中,文件大小对我的项目很重要。但是结果文件的大小似乎不正确,一个简单的代码示例: FILE *fp = fopen( "123.txt"
由于某种原因,当我尝试使用 fputc 通过管道写入时,我的程序无法工作;但是,当我使用 write 系统调用时它工作正常。这是我使用 fputc 的代码部分: FILE *input = f
我对 C 很陌生,我正在尝试使用 fputc() 在文件中存储整数。当我查看整数格式不同的文件时,该函数起作用。 例如: 1) fputc(ppm1->max, file1); ppm1->max 指
我 3 天前才开始学习 C,我正在尝试编写一个程序,它接收一个文件、读取字符并从中删除所有空格和制表符。我是一名初级程序员,在开始学习 C 之前只学习了一点 MATLAB。我使用的是 Ubuntu 1
#include int main() { FILE *fp; char ch = 'g'; fp = fopen("temp.txt", "r+"); while
我应该编写一个程序来获取文本文件(包含纯文本)并更正以下错误(涉及标点符号): Hello , there! --> Hello, there! Hello ,there! --> Hello, th
给定 unsigned char *str,一个 UTF-8 编码的字符串,用 fputc((char)(*str), file 写入第一个字节(不是字符)是否合法); 最佳答案 移除对 char 的
我有一个用 C 语言编写的小程序,它以一个菜单开始,该菜单在一个带有 do{switch{case 1....}while 循环的函数中实现 当案例 1 验证时,它调用另一个函数,其中 while 循
我有以下 C 函数: int vacateDir(const INODE *pParDirInode) { FILE *fp = fopen("fs560", "rb+"); if (fp =
当使用 fopen("/some/path", "r") 创建流时,我无法找到对 fputc() 指定行为的任何引用>. 我搜索了 C11 Draft n1570 pdf 寻找任何没有运气的引用,fo
我想更改文件的一个值,但以下代码根本不起作用。当我删除 if 语句时它可以正常工作。 代码如下: #include int main() { int b; FILE *fp;
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
我正在使用 C 语言编写基本的 fputc 应用程序。我正在编写/附加“.”在文件中使用 for 循环次数。但是,该文件显示的是垃圾字母而不是“。” . #include int main()
我正在尝试使用 fseek 转到文件中的特定位置并打印文本。但是当我使用 fputc 或 fwrite 时,它们会继续输入十六进制值而不是字符值。该文件是 .dat,最初用 0 填充。因此,除此之
getc() 与 fgetc() putc() 与 fputc() 它们之间的主要区别是什么? 我听说除了 getc() 可以用作宏之外,这两个函数的作用几乎相同。这是什么意思? 如果它们相同,为什么
我在使用 fputc 时遇到问题 - 也许有人可以提供帮助。我在开始时分配了一些存储空间,并分配给了 data[0] = 'B' 和 data[1] = 'M' - 数组的其余部分填充了数字。然后数据
int fputc(int c, FILE *stream); int fputs(const char *s, FILE *stream); 为什么在 fputc() 的声明中不需要 const i
我正在用 C 创建一个存档程序,我希望它保存我提供的文件,列出并提取它们。 我有很多问题,因为我使用文本文件进行保存,如果我想处理音乐或照片等二进制文件,这不是最佳选择,因为当我提取它们时,它们没有正
我是一名优秀的程序员,十分优秀!