我用ENTER写了一个程序来停止程序,但它不是't工作

  • 本文关键字:程序 工作 ENTER 一个 我用 c
  • 更新时间 :
  • 英文 :


我编写这个程序是为了从文件中读取少量西班牙语和英语单词,并提示输入英语单词并获得西班牙语翻译。要停止程序,必须只按回车键。然而,这个程序并没有停止,它只是在等待另一个单词。这是程序

#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE*in=fopen("input.txt","r");
char English[9][20],Spanish[9][20],word[20];
int find(char[],char[][20]);
for(int j=0; j<=8;j++)
fscanf(in,"%s",English[j]);
for(int r=0;r<=8;r++)
fscanf(in,"%s",Spanish[r]);
printf("type some English word to stop press enter onlyn");
scanf("%s",word);
while(strcmp(word,"")!=0){
int t=find(word,English);
printf("the Spanish word for %s is %sn",word,Spanish[t]);
printf("type some english word to stop press enter onlyn");
scanf("%s",word);}
fclose(in);
}
int find(char word[],char English[][20]){
for(int j=0;j<=8;j++)
if(strcmp(English[j],word)==0) return j;
}

我以为按ENTER键会保存空字符串""在数组字中,程序将停止。这就是代码。

while(strcmp(word,"")!=0)

我对编码真的很陌生,我不知道为什么它不起作用。

您可以这样做,只需将字符q设置为quit:

while(strcmp(word,"q")!=0){
int t=find(word,English);
printf("the Spanish word for %s is %sn",word,Spanish[t]);
printf("type some english word to stop press enter onlyn");
scanf("%s",word);
}
printf("nExiting...n");

"编码的新手";以及";被scanf"混淆";是一个普遍的真理。说真的,不要使用scanf,直到你足够好地理解语言,意识到你从来都不需要它。也就是说,你可以做:

$ cat a.c
#include <stdio.h>
int
main(void)
{
char word[1024];
char c;
int rc;
while( ( rc = scanf("%1023[^n]%c", word, &c)) == 2 ) {
printf("word = %sn", word);
}
return 0;
}
$ printf 'foonbarnnignoredn' | ./a.out
word = foo
word = bar

格式字符串将所有内容匹配到一个换行符,并将其存储在word中,然后使用带有%c的换行符。(您也可以使用%*c,而不提供要分配的变量。(当输入流中有两个相邻的换行符时,第一个转换说明符与第二个换行符不匹配,循环终止。请注意,如果任何一行输入超过1023个字符,则此操作将失败。这里有两条一般规则:1(%s关心空白,如果你想专门处理空白,你应该使用%[而不是%s;2(总是,总是,总是检查scanf返回的值。如果您调用scanf,但它不在If条件、循环控制或赋值的右侧,则这是一个错误。

相关内容

最新更新