gpt4 book ai didi

c - c中不退出循环

转载 作者:行者123 更新时间:2023-11-30 21:31:05 25 4
gpt4 key购买 nike

我希望问题能够按以下顺序识别单词:XYZ1111***,无论有多少个“1”或“*”,但它必须至少有一个“1”,并且 XYZ 必须是按照确切的顺序,并且始终包含在内以使字符串有效。它必须从我写了很多这些单词的文件中读取,例如 XYZ1XYZ1111*1111* 并打印 ok 如果单词满足限制。当我运行程序时,它只获取文件名,然后不执行任何操作。这是我的代码:

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char *argv[]) {

FILE *input;
char c;

if(argc >2) {
printf("Too much arguments");
exit(1);
} else if(argc==2) {
input=fopen(argv[1],"r");
if(input==NULL) {
printf("Unable to find file ");
exit(1);
}
} else {
input=stdin;
c=fgetc(input);
while (!feof(input)) {
if (c=='x') {
int state=1;
while(1) {
switch(state) {
case 1:
c=fgetc(input);
if (c=='Y')
state=2;
break;
case 2:
c=fgetc(input);
if(c=='Z')
state=3;
break;
case 3:
c=fgetc(input);
if (c==1)
state=4;
break;
case 4:
if (c=='1')
state=4;
else if(c=='*')
state=5;
else if(c=='\n' || c=='\t' || c==' ')
printf("ok");
break;
case 5:
if (c=='*')
state=5;
else if(c=='\n' || c=='\t' || c==' ')
printf("ok");
break;
} // end of switch
} // end of while(1)
} // end of if(c=='x')
} // end of while(!feof(input))
} // end of else
printf("bgika");
} // end of main

最佳答案

我认为你的做法是错误的。正如我从你的解释中了解到的,该字符串必须以“XYZ1”开头,在此之后,无论有多少个1(只是1,而不是其他字符)。因此,使用 strncmp 检查第一部分,然后检查剩余字符是否全为 1,将非常简单。

c=fgetc(input);
if(strncmp(c, "XYZ1", 4) == 0){
//check if remaining characters are 1
}else{
//the string does not match
}

此外,不鼓励使用 while(!feof(input)):Why is “while ( !feof (file) )” always wrong?

关于c - c中不退出循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20103833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com