虽然 GetChar != EOF 不一致地终止
While GetChar != EOF terminating inconsistently
我有这两段代码,它们的目的都是为了获得一些用户输入,制作一个加密脚本。
int keyPrompt(){
/* this prompts the user for the Caesar encryption key */
int c;
printf("Enter key value between 1-9: ");
while((c=getchar()) != EOF && c != '\n'){
return c;
}
}
int cryptPrompt(){
/* this asks the user whether they want to encrypt or decrypt */
int d;
printf("Do you want to encrypt or decrypt?(E/D): ");
while((d=getchar()) != EOF && d != '\n'){
/*
if(d == 'E'){
return 1;
}
else if (d == 'D' ){
return -1;
}
*/
return d;
}
}
我遇到的问题是,当我 运行 文件时,第一个 while 循环的行为与我预期的一样:我输入一个值,按回车键,它会转到下一行。对于第二个 while 循环,当它执行该函数时,它会跳过询问用户输入并直接转到下一行,而不存储任何 return 值。
知道它为什么这样做吗?
考虑这段代码的作用:
int keyPrompt(){
/* this prompts the user for the Caesar encryption key */
int c;
printf("Enter key value between 1-9: ");
while((c=getchar()) != EOF && c != '\n'){
return c;
}
}
打印提示后,读取一个输入字符。如果该字符是 EOF 或换行符,它会退出循环并离开函数的末尾(没有 return,如果不忽略 returned 值,则会导致未定义的行为)。如果它不是 EOF 或换行符,则它 return 是字符。
while 循环在任何情况下都不会真正循环。
考虑一下如果您调用此代码并输入一个键+换行符会发生什么。密钥将被读取并 returned,换行符将留在输入缓冲区中。现在考虑如果您像这样调用另一个函数会发生什么——它首先读取的是 keyPrompt
函数遗留下来的换行符...
我有这两段代码,它们的目的都是为了获得一些用户输入,制作一个加密脚本。
int keyPrompt(){
/* this prompts the user for the Caesar encryption key */
int c;
printf("Enter key value between 1-9: ");
while((c=getchar()) != EOF && c != '\n'){
return c;
}
}
int cryptPrompt(){
/* this asks the user whether they want to encrypt or decrypt */
int d;
printf("Do you want to encrypt or decrypt?(E/D): ");
while((d=getchar()) != EOF && d != '\n'){
/*
if(d == 'E'){
return 1;
}
else if (d == 'D' ){
return -1;
}
*/
return d;
}
}
我遇到的问题是,当我 运行 文件时,第一个 while 循环的行为与我预期的一样:我输入一个值,按回车键,它会转到下一行。对于第二个 while 循环,当它执行该函数时,它会跳过询问用户输入并直接转到下一行,而不存储任何 return 值。
知道它为什么这样做吗?
考虑这段代码的作用:
int keyPrompt(){
/* this prompts the user for the Caesar encryption key */
int c;
printf("Enter key value between 1-9: ");
while((c=getchar()) != EOF && c != '\n'){
return c;
}
}
打印提示后,读取一个输入字符。如果该字符是 EOF 或换行符,它会退出循环并离开函数的末尾(没有 return,如果不忽略 returned 值,则会导致未定义的行为)。如果它不是 EOF 或换行符,则它 return 是字符。
while 循环在任何情况下都不会真正循环。
考虑一下如果您调用此代码并输入一个键+换行符会发生什么。密钥将被读取并 returned,换行符将留在输入缓冲区中。现在考虑如果您像这样调用另一个函数会发生什么——它首先读取的是 keyPrompt
函数遗留下来的换行符...