[英]Why does the number 10 get output in each iteration and how can I fix this?
我有一個 for 循環,我想從用戶那里獲取輸入並打印相關的 ascii 值。 但它只在第二次迭代中要求用戶輸入,在輸出 10 之后和之前。我試圖擺脫換行符,但它仍然打印出 10。
#include <stdio.h>
int main(void){
int number;
printf("Enter the number:");
scanf("%i", &number);
for( ; number > 0; number--){
char character;
printf("Give a char: \n");
scanf("%c", &character);
printf("The associated ascii value is %i \n", character);
}
return 0;
}
也許更簡單(雖然不推薦使用scanf()
進行用戶輸入)
scanf(" %c", &character);
// ^ skip otional leading whitespace
您的整個程序使用fgets()
進行用戶輸入(以及我的縮進、間距、樣式;抱歉)
#include <stdio.h> // printf(), fgets()
#include <stdlib.h> // strtol()
int main(void) {
int number;
char buffer[100]; // space enough
printf("Enter the number:");
fgets(buffer, sizeof buffer, stdin);
number = strtol(buffer, 0, 10); // error checking missing
for (; number > 0; number--) {
printf("Give a char: ");
fgets(buffer, sizeof buffer, stdin); // reuse buffer, error checking missing
if (buffer[0] != '\n') {
printf("The associated ascii value of '%c' is %i.\n", *buffer, *buffer);
}
}
return 0;
}
這應該可以解決您的問題。 getchar()
將從緩沖區讀取額外的換行符。
#include <stdio.h>
int main(void){
int number;
printf("Enter the number:");
scanf("%i", &number);
for( ; number > 0; number--){
char character;
printf("Give a char: ");
getchar();
scanf("%c", &character);
printf("The associated ascii value is %i \n", character);
}
return 0;
}
關於;
scanf("%c", &character);
第一次通過循環輸入 '\\n'。
在所有后續通過循環時, scanf()
失敗,因此character
中的值不會改變。
這是為什么您的代碼應該進行錯誤檢查的主要示例。
例如,要錯誤檢查對scanf()
的調用:
if( scanf("%c", &character) != 1 )
{
fprintf( stderr, "scanf for a character failed\n" );
break;
}
1
是因為scanf()
系列函數返回成功的數量: input format conversion specifiers
或 EOF 並且最好確保“肯定”狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.