簡體   English   中英

為什么每次迭代都會輸出數字 10,我該如何解決這個問題?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM