C 带有2个ifs的代码不断给出第一个ifs';s结果
我是C语言的新手,我的任务是制作一个计算次数的程序已在用户选择的文件中使用。所以我决定用一堆如果来做它,当我把第一个关闭(只有一个if)时它就工作了,但是当我添加else-if段时,它只是吐出了第一个if的结果(eof的数字),我不知道为什么会发生这种情况。代码如下:C 带有2个ifs的代码不断给出第一个ifs';s结果,c,C,我是C语言的新手,我的任务是制作一个计算次数的程序已在用户选择的文件中使用。所以我决定用一堆如果来做它,当我把第一个关闭(只有一个if)时它就工作了,但是当我添加else-if段时,它只是吐出了第一个if的结果(eof的数字),我不知道为什么会发生这种情况。代码如下: #include<stdio.h> #include<stdlib.h> int main() { FILE *fp; int s = 0; int ch; char in
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
int s = 0;
int ch;
char in;
printf("Choose which file to be opened: inpt , eof or cntr\n");
scanf("%c", &in);
if (in = 'eof')
{
fp = fopen("D:\\programming\\C projects\\kursova PIK 1\\kursova 1\\New folder\\eof.c", "r");
if (fp == NULL)
{
printf("Error opening file");
}
else
{
while (!feof(fp))
{
ch = fgetc(fp);
if (ch == ';')
{
++s;
}
else if (ch == EOF)
break;
}
fclose(fp);
printf("The number of times ';' was used is: %d", s);
}
}
else if (in = 'inpt')
{
fp = fopen("D:\\programming\\C projects\\kursova PIK 1\\kursova 1\\New folder\\inpt.c", "r");
if (fp == NULL)
{
printf("Error opening file");
}
else
{
while (!feof(fp))
{
ch = fgetc(fp);
if (ch == ';')
{
++s;
}
else if (ch == EOF)
break;
}
fclose(fp);
printf("The number of times ';' was used is: %d", s);
}
}
system("pause");
return 0;
}
char in;
printf("Choose which file to be opened: inpt , eof or cntr\n");
scanf("%c", &in);
if (in = 'eof')
#包括
#包括
int main()
{
文件*fp;
int s=0;
int-ch;
炭素;
printf(“选择要打开的文件:inpt、eof或cntr\n”);
扫描频率(“%c”和“&in”);
如果(in='eof')
{
fp=fopen(“D:\\programming\\C projects\\kursova PIK 1\\kursova 1\\New folder\\eof.C”,“r”);
如果(fp==NULL)
{
printf(“打开文件时出错”);
}
其他的
{
而(!feof(fp))
{
ch=fgetc(fp);
如果(ch==';')
{
++s;
}
否则如果(ch==EOF)
打破
}
fclose(fp);
printf(“使用“;”的次数为:%d”,s);
}
}
else if(in='inpt')
{
fp=fopen(“D:\\programming\\C projects\\kursova PIK 1\\kursova 1\\New folder\\inpt.C”,“r”);
如果(fp==NULL)
{
printf(“打开文件时出错”);
}
其他的
{
而(!feof(fp))
{
ch=fgetc(fp);
如果(ch==';')
{
++s;
}
否则如果(ch==EOF)
打破
}
fclose(fp);
printf(“使用“;”的次数为:%d”,s);
}
}
系统(“暂停”);
返回0;
}
不能在单个字符变量中输入三个字母的字符串。如果您计划用户输入eof
或类似的内容,则需要声明一个字符数组,例如
char userinput[ 30];
然后使用
scanf( "%s", userinput);
并将其与字符串进行比较,而不是多字符文字:
if( strcmp( userinput, "eof") == 0)
process a file
而不是
if(in == 'eof)
最后,请注意,您使用双倍等号来比较值。单个
=
是一个赋值,而不是C中的比较。在这大部分代码中存在多个问题:
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
int s = 0;
int ch;
char in;
printf("Choose which file to be opened: inpt , eof or cntr\n");
scanf("%c", &in);
if (in = 'eof')
{
fp = fopen("D:\\programming\\C projects\\kursova PIK 1\\kursova 1\\New folder\\eof.c", "r");
if (fp == NULL)
{
printf("Error opening file");
}
else
{
while (!feof(fp))
{
ch = fgetc(fp);
if (ch == ';')
{
++s;
}
else if (ch == EOF)
break;
}
fclose(fp);
printf("The number of times ';' was used is: %d", s);
}
}
else if (in = 'inpt')
{
fp = fopen("D:\\programming\\C projects\\kursova PIK 1\\kursova 1\\New folder\\inpt.c", "r");
if (fp == NULL)
{
printf("Error opening file");
}
else
{
while (!feof(fp))
{
ch = fgetc(fp);
if (ch == ';')
{
++s;
}
else if (ch == EOF)
break;
}
fclose(fp);
printf("The number of times ';' was used is: %d", s);
}
}
system("pause");
return 0;
}
char in;
printf("Choose which file to be opened: inpt , eof or cntr\n");
scanf("%c", &in);
if (in = 'eof')
您已经将代码设置为读取单个字符,这本身并不是一个主要问题。您可能应该使用“%c”
作为跳过前导空格的格式,但这是一种改进
您应该检查scanf()
是否成功:
if (scanf(" %c", &in) != 1)
return 1;
然后尝试将单个字符输入与多个字符进行比较。而且,正如注释中所指出的,这是不成功的,因为您没有进行比较,而是分配(=
和=
之间的差异)。多字符文字是不可移植的。但是,有一点是可以保证的,即多字符文字不是零,因此您的if
条件是以下内容的简写:
if ((in = 'eof') != 0)
由于多字符常量不是'\0'
,因此该条件为true,因此始终执行代码的第一部分,而不管用户键入什么
看起来您确实需要字符串输入和字符串比较,这是通过
中的strcmp()
完成的
这些是主要的初始问题;我不能保证没有其他人需要处理
而且,根据一般经验,最好在printf()
语句末尾换行。你有:
printf("The number of times ';' was used is: %d", s);
你应使用:
printf("The number of times ';' was used is: %d\n", s);
在if
和else if
块中,您似乎拥有大部分代码。这表明您应该使用函数,或者使用:
char *filename = 0;
if (strcmp(in, "eof") == 0)
filename = "D:\\programming\\C projects\\kursova PIK 1\\kursova 1\\New folder\\eof.c";
else if (strcmp(in, "inpt") == 0)
filename = "D:\\programming\\C projects\\kursova PIK 1\\kursova 1\\New folder\\inpt.c";
else
{
fprintf(stderr, "Did not understand '%s'\n", in);
return 1;
}
然后,您可以使用代码的单个副本来打开、读取、关闭和报告
filename
中指定的文件内容。尽可能避免重复。要么将它变成一个单独的函数,用不同的参数调用它,要么用我展示的相同方法消除重复。检查下面的代码。您正在将多个字符与不正确的字符进行比较,因此为了比较字符串,请使用strcmp()
,如下所示,并在代码的其他部分进行相同的更改
char in[5];
scanf("%s",&in);
if(strcmp(in,"eof") == 0)
{
}
else if(strcmp(in,"inpt") == 0)
{
}
in='eof'
和fp==NULL
——看到区别了吗?这不是objective-c,请编辑您的问题,使其成为正确的标记,如果问题正确标记,则无需在标题中提及编程语言。此外,您似乎不知道多字符文字的含义@Juhana我已经尝试了in==“eof”
,但仍然没有成功work@igrilkul当然不会–正如我上面解释的那样,您将字符与字符串混淆。请显示测试scanf()
;否则,你就成功了。