Tag: fgetc

fgetc不工作C-重复返回相同的char

我正在使用C并尝试读取文件并将fgetc返回的字符保存在数组中。 问题是fgetc重复返回一个随机char。 评论中标记的位置。 例如,“wwwwwwwwwwww …”或“@@@@@@@@@@@@”。 任何帮助表示赞赏。 这是function: void removeCategories(FILE *category, int *prodPrinted){ char more[16] = { ‘\0’ }, hidden[17] = { ‘\0’ }, temp = ‘\0’, mdn[] = { “More Data Needed” }, hnl[] = { “Hidden non listed” }; int newLineCount = 0, i, ch = ‘\0’; do{ /*shift char in each list -> […]

C中的不同输出内容文件副本

您好我在C中有一个简单的复制文件程序,但我无法解释为什么当我使用第二种方法时,我在目标文件中得到不同的输出。 for循环的正确输出: I am the worst programmer in the world! 😀 And this is bla bla bla bla more bla bla bla… 但是在while循环中,在EOF中生成一个随机字符: I am the worst programmer in the world! 😀 And this is bla bla bla bla more bla bla bla…  代码是 int main() { int i; char ch; create_files(); FILE *src […]

如何使用fgetc()计算唯一的单词数,然后在C中打印计数

我已经问了一个与这个程序有关的问题,但现在经过大量的研究和头部停留后,我再次陷入困境。 我正在尝试编写一个程序,它将接受用户输入并存储它然后打印出所有唯一的单词和它们每次发生的次数 例如 Please enter something: Hello#@Hello# hs,,,he,,whywhyto[then the user hits enter] hello 2 hs 1 he 1 whywhyto 1 上面应该是输出,当然为什么为什么不是一个单词但在这种情况下无关紧要因为我假设任何字母的模式由不是字母的任何东西分隔(空格,0-9,#$ (@等)被认为是一个单词。我需要使用2D数组,因为我不能使用链表,也不能理解它们。 这就是我到目前为止所做的一切 #include #include int main() { char array[64]; int i=0, j, input; printf(“Please enter an input:”); input=fgetc(stdin); while(input != ‘\n’) { if(isalpha(input)) { array[i]=input; i++; } input=fgetc(stdin); } for(j=0;j<i;j++) { // printf("%c ",j,array[j]); […]

检查EOF和fgetc()错误的更好方法是什么?

我总是使用这种方法 int c; while ((c = fgetc(fp))!=EOF) { printf(“%c”, c); } 因为在我看来,它更具可读性和强大性。 但对于我的链接答案, chux评论说 if(feof(fp))比int c更健壮; while((c = fgetc(fp))!= EOF) 如 while(1) { c = fgetc(fp); if ( feof(fp) ) { break ; } printf(“%c”, c); } 比第一个版本更强大。 那么我应该使用什么版本? 请解释一下为什么这个版本更好。 编辑 问题为什么“while(!feof(file))”总是错的? 有人问为什么控制循环中的feof()总是错误的。 但是,如果条件适当地检查feof()总是错误的? 解释很明显。

fgetc不是从大txt文件的开头开始的

我在C工作,有一个617kb的文本文件,我试图用fgetc读取。 由于某种原因, fgetc在文件中随机启动。 我已经尝试移动文件指针以开始使用fseek没有成功。 我可以使用较小的文件来完成fgetc工作。 任何帮助表示赞赏。 样本输入是25,000行数据,类似于: Product 23 660 2366 3 237 09 2 3730 23734 23 773 241 46 资源: #define _CRT_SECURE_NO_WARNINGS #include #include #include void print(FILE *category){ int ch = ‘a’; while ((ch = fgetc(category)) != EOF){ printf(“%c”, ch); } getchar(); } int main(void){ FILE *category = fopen(“myFile”, “r”); if (category == […]

C fgets与fgetc的阅读线

我需要读取一行文本(以换行符结尾)而不对长度做出假设。 所以我现在面对各种可能性: 使用fgets并每次检查最后一个字符是否为换行符并连续追加到缓冲区 使用fgetc读取每个字符,偶尔重新分配缓冲区 Intuition告诉我fgetc变体可能会变慢,但是再一次我没有看到fgets如何在不检查每个角色的情况下做到这一点(我的直觉并不总是那么好)。 线条非常大,因此性能很重要。 我想知道每种方法的优缺点。 先感谢您。

使用fgetc时,是否可以将EOF与正常的字节值混淆?

我们经常使用这样的fgetc : int c; while ((c = fgetc(file)) != EOF) { // do stuff } 从理论上讲,如果文件中的某个字节的值为EOF ,则此代码存在错误 – 它会提前中断循环并且无法处理整个文件。 这种情况可能吗? 据我所知, fgetc内部将从文件读取的字节转换为unsigned char ,然后转换为int ,并返回它。 如果int的范围大于unsigned char的范围,这将起作用。 如果不是(可能那么sizeof(int)=1 )会发生什么? fgetc有时会从文件中读取等于EOF的合法数据吗? 它会改变从文件中读取的数据以避免单值EOF吗? fgetc会是一个未实现的function吗? EOF会不会是另一种类型,比如long ? 我可以通过额外的检查使我的代码变得简单: int c; for (;;) { c = fgetc(file); if (feof(file)) break; // do stuff } 如果我想要最大的便携性是必要的吗?

如何将转义字符打印为字符?

我正在尝试使用以下代码将转义字符打印为字符或字符串: while((c = fgetc(fp))!= EOF) { if(c == ‘\0’) { printf(” \0″); } else if(c == ‘\a’) { printf(” \a”); } else if(c == ‘\b’) { printf(” \b”); } else if(c == ‘\f’) { printf(” \f”); } else if(c == ‘\n’) { printf(” \n”); } else if(c == ‘\r’) { printf(” \r”); } else if(c […]

通过char读取字符串直到C / C ++行结尾

如何在一个字符串中读取一个字符串,并在到达行尾时停止? 我使用fgetc函数从文件读取并将字符放入数组(后者将数组更改为malloc),但无法弄清楚当到达行尾时如何停止 试过这个(c是来自文件的char变量): if(c==”\0″) 但它给出了错误,我无法将指针与整数进行比较 文件看起来像(单词的长度未知): one two three 所以这里有一些问题:1)我可以将c与\ 0进行比较,因为\ 0是两个符号(\和0)或者它被计为一个(与\ n相同的问题)2)也许我应该使用\ n? 3)如果上面的建议有误,你会建议什么(注意我当时必须阅读字符串一个字符) (注意我对C ++很新(并自己编程))

fgetc(stdin)在循环中产生奇怪的行为

我有这个代码 while(1){ printf(“hello world !\n”); fgetc(stdin); } 当它运行时,我输入这样的字母: hello world ! a 它忽略了下一个循环中的fgetc(stdin)并打印了两次hello world而不等待输入。 hello world ! a hello world ! hello world ! a hello world ! hello world ! a hello world ! hello world ! a hello world ! hello world ! 我试过在fgetc(stdin)之前或之后放fflush(stdin)但它仍然会产生相同的行为,我做错了什么?