我有点困惑如何通过数组并将每个字母添加到数组notes[]
中。我不确定什么是递增while循环来扫描每个字符。我试图通过每个角色来查看它是否是一个字母,然后将其大写。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(){
FILE * files;
char notes[1000];
int charcounter = 0, wordcounter = 0, c;
files = fopen("input.txt", "r");
if(!files)
{
return EXIT_FAILURE;
}
if(files)
{
while(fgets(notes, sizeof notes, files) != NULL)
{
size_t i, n = strlen(notes);
for (i = 0; i < n; i++)
{
if(isalpha(notes[i]))
{
int c = toupper(notes[i]);
putchar(c);
if(wordcounter == 50)
{
printf("\n");
wordcounter = 0;
}
if(charcounter == 5)
{
printf(" ");
charcounter = 0;
}
wordcounter++;
charcounter++;
}
}
}
}
fclose(files);
system("PAUSE");
return 0;
}
我正在使用这个参考: int c;
FILE *file;
file = fopen("test.txt", "r");
if (file) {
while ((c = getc(file)) != EOF)
putchar(c);
fclose(file);
}
答案 0 :(得分:0)
fgets()将文件中的字符串读入char数组。在您的代码中,您将一个字符串读入名为 notes 的数组中。您应该遍历该变量中的每个字符,即C字符串。
一些一般性评论: a)不要返回-1。如果希望代码符合ANSI C,则返回EXIT_SUCCESS或EXIT_FAILURE,或者返回POSIX平台的正数。
b)在调用fgets()时使用sizeof,而不是两次硬编码数组的长度。
c)isalpha(),toupper()和putchar()需要一个int作为参数。您的代码使用char [1000]数组作为参数。这不应该在没有警告/错误的情况下编译。 (我试过,并按预期收到警告)。总是在启用所有警告的情况下进行编译是一个好习惯,它可以避免琐碎的错误。如果你使用gcc,那么选项-Wall -Wextra -pedantic可能很有用,至少在调试之前。
以下是您的计划的精简版,以说明我的评论:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
FILE *f;
char notes[1000];
f = fopen("input.txt", "r");
if (!f) {
return 1;
}
while (fgets(notes, sizeof notes, f) != NULL) {
size_t i, n = strlen(notes);
for (i = 0; i < n; i++) {
int c = toupper(notes[i]);
putchar(c);
}
}
fclose(f);
return 0;
}
HTH