我希望得到符号的出现&#39 ;;'对于这个C程序的每一行。我输入文件Source.c的名称并尝试计算出现的符号,但我得到了所有&#39 ;;'的值。对于每一行。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>/* For exit() function */
int main()
{
char file_name[150];
FILE *file2 = 0;
gets(file_name);
{
int rows = 1;//broq na vsichki redove
int dotcoma[150];
int j;
int c=0;
file2 = fopen(file_name, "r");//otvarq faial za chetene
if (file2 == NULL){
printf("Cannot open %s\n", file_name);
exit(2);
}//if
for (j = 0; j < 150; j++)
dotcoma[j]=0;
do{
c = fgetc(file2);
if (c == '\n') rows++;
if (';' == c)
dotcoma[rows-1] ++;
} while (c != EOF && rows <= 150);//chete do kraq na faila
if (ferror(file2)){
printf("Error reading file.\n");
}//if
printf("The number of the symbols on a row ");
printf("Row %d: %f\n", j + 1, (float)dotcoma[j]);
}
if (fclose(file2) == EOF){
printf("Cannot close %s\n", file_name);
}
_getche();
return 0;
}
答案 0 :(得分:1)
你几乎掌握了一切。你需要做的唯一改变就是放行
printf("Row %d: %f\n", j + 1, (float)dotcoma[j]);
在for
循环中,将格式从%f
更改为%d
。
printf("The number of the symbols on a row \n");
for (j = 0; j < rows; j++)
{
printf("Row %d: %d\n", j + 1, dotcoma[j]);
}
您必须确保rows
保持在150或以下。否则,您将最终访问数组dotcoma
越界。一种方法是使用:
do{
c = fgetc(file2);
if (c == '\n') rows++;
if (';' == c)
dotcoma[rows-1] ++;
} while (c != EOF && rows <= 150);//chete do kraq na faila
答案 1 :(得分:0)
我取得了很大的进步。它现在计入每个';'的频率对于一条线,并希望添加一个新的符号频率以及'。'在我的情况下,但它说有堆栈arround变化。这里是代码工作,但只是没有第二个符号频率逗号++计数器。有人可以提供建议如何解决吗?
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS /* Да си изключа предупрежденията*/
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>/* For exit() function */
int main()
{
char file_name[1000];
FILE *file2 = 0;
gets(file_name);
int rows = 1;//broq na vsichki redove
int dotcoma[150];//broq na ;
int coma[150];//broq na .
int j;
char c;
file2 = fopen(file_name, "r");//otvarq faial za chetene
if (file2 == NULL){
printf("Cannot open %s\n", file_name);
exit(2);
}//if
for (j = 0; j<150; j++)
dotcoma[j] = 0;
coma[j] = 0;
do{
c = fgetc(file2);
if (c == '\n') rows++;
else{
if (c == ';')
dotcoma[rows - 1]++;
if (c == '.')
coma[rows-1]++;
}
} while (c != EOF);//chete do kraq na faila
if (ferror(file2)){
printf("Error reading file.\n");
exit(2);
}//if
printf("The number of the symbols on a row / the number of all symbols: ");
for (j = 0; j<rows; j++){
printf("Row %d: %f %f\n", j + 1, (float)dotcoma[j], coma[j]);
}
_getche();
if (fclose(file2) == EOF){
printf("Cannot close %s\n", file_name);
exit(2);
_getche();
return 0;
}
}