C 如何使用说明符查找字符串中是否存在子字符串?
我有一个关于这种无线电频率的文件C 如何使用说明符查找字符串中是否存在子字符串?,c,C,我有一个关于这种无线电频率的文件 Radio One 104.3 Radio Two 106.3 我必须把收音机的名字或频率传给节目。如果我传递收音机的名称或浮点数,它就会出现分段错误。我必须使用说明符%[^set]在cass中查找我在终端中传递频率的收音机的名称。我该怎么办 #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> int mai
Radio One 104.3
Radio Two 106.3
我必须把收音机的名字或频率传给节目。如果我传递收音机的名称或浮点数,它就会出现分段错误。我必须使用说明符%[^set]
在cass中查找我在终端中传递频率的收音机的名称。我该怎么办
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int main(int argc, char *argv[]){
FILE *in;
in = fopen("frequenze.txt", "r");
char radio[100];
float frequenza;
if(isalpha(argv[1]) != 0){
while(fgets(radio, 100, in) == radio){
if(strncmp(argv[1], radio, strlen(argv[1])) == 0){
printf("%s\n", radio);
}
}
}
if(isdigit(argv[1]) != 0){
while(fscanf(in, "%[^%f]", &frequenza) == 1){
if(frequenza == atof(argv[1])){
fgets(radio, 100, in);
printf("%s\n", radio);
}
}
}
return 0;
}
#包括
#包括
#包括
#包括
int main(int argc,char*argv[]){
文件*in;
in=fopen(“frequenze.txt”,“r”);
字符无线电[100];
浮动频率;
if(isalpha(argv[1])!=0){
while(fgets(收音机,100英寸)=收音机){
if(strncmp(argv[1],radio,strlen(argv[1]))==0){
printf(“%s\n”,收音机);
}
}
}
如果(isdigit(argv[1])!=0){
while(fscanf(in,“%[^%f]”,&frequenza)==1){
if(frequenza==atof(argv[1])){
fgets(无线电,100英寸);
printf(“%s\n”,收音机);
}
}
}
返回0;
}
尽管这个程序很小,但它仍然为或多或少的细微错误提供了不少机会
- 应该检查是否给出了程序参数
- 使用
和isalpha()
,只能测试一个字符,不能测试整个字符串。也许你的意思是isdigit()
和isalpha(*argv[1])
isdigit(*argv[1])
- 在字符类中使用转换规范(如
)很有想象力,但不起作用。此外,如果没有fseek操作,则无法从头开始重新读取中的[^%f]
中的行。最好从一开始就把名字和频率一起读
- 由于操作数的精度不同(
vs.float frequenza
),比较double atof()
失败frequenza==atof(argv[1])
if(argc<2)返回1;
if(isalpha(*argv[1]))
while(fgets(收音机,100英寸)=收音机)
if(strncmp(argv[1],radio,strlen(argv[1]))==0)
printf(“%s”,收音机);
if(isdigit(*argv[1]))
而(fscanf(在“%[^0-9]%f”中),无线电和频率=2)
if(frequenza==(float)atof(argv[1]))
printf(“%s%g\n”,无线电,频率);
评论不用于扩展讨论;此对话已结束。如果使用*argv[1],您是指第一个字符还是指整个字符串?*argv[1]是否与argv[1][0]相同?使用%[^0-9]表示您正在存储字符串,但一旦发现包含在0和9之间的数字,它就会停止扫描?我不明白为什么它不打印无线电字符串,而是打印频率。我和你做的一模一样。第一个if有效,但第二个不行。@user11006304-*argv[1]
是字符串argv[1]
的第一个char
,是的,与argv[1][0]
@user11006304-是的,%[^0-9]
存储字符串(包括空格),直到找到一个数字。请注意,这意味着无线电台名称不能包含数字。
if (argc < 2) return 1;
if (isalpha(*argv[1]))
while (fgets(radio, 100, in) == radio)
if (strncmp(argv[1], radio, strlen(argv[1])) == 0)
printf("%s", radio);
if (isdigit(*argv[1]))
while (fscanf(in, "%[^0-9]%f ", radio, &frequenza) == 2)
if (frequenza == (float)atof(argv[1]))
printf("%s%g\n", radio, frequenza);