簡體   English   中英

使用char和scanf以及for循環時遇到問題?

[英]Problems using char and scanf and the for loop?

我的問題是使用char和scanf。 在下面,您可以找到幾乎可以正常運行的代碼。 問題與for循環有關。 您看,我想問用戶10個字符,並計算字母,但是for循環無法正常工作。 它正確地計算輸入。 例如,如果用戶鍵入6,可以,或者a,也可以,但是如果他鍵入例如10或11,則程序會認為用戶鍵入了2個不同的字符,但是實際上用戶只鍵入了一個字符“ 10”。 因此,請幫助我,並解釋一下為什么charf無法正常工作。 謝謝!

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


unsigned int countalpha(void){

printf("Please enter 10 characters:\n");

char b;
int sum = 0;
int i = 0;

for (i = 0; i<10; i++)
    {
    scanf("%c\n", &b);


    if (isalpha(b))
        sum = sum +1;
    else
        sum = sum;

    }


    return sum;

}

int main()
{
    int sum;

    sum = countalpha();
    printf ("Letters totally: %d", sum);

    return 0;
}

scanf()函數難以正確使用。

scanf()格式字符串中的scanf()空白對於交互式輸入而言是同義的。 符號"%c\\n"表示“讀取字符; 然后跳過后面的空格,直到下一個不是空格的字符,然后才從函數中返回。 這很少是您想要的。 用戶將需要輸入一個字符,也許是a ,然后再返回,再輸入一個,再加上一些空白,依此類推,但是直到沮喪地輸入“您愚蠢的程序”(和一個換行符),此時一切突然開始起作用,除了他們的注釋可能不是對下一個輸入的正確響應。 否則他們會遇到中斷,再也不會再次運行您的程序,因為這對他們來說太令人沮喪了。

請注意, scanf()格式字符串中的任何空格字符均表示“跳過可選空格”,這意味着如果存在空格,制表符,換行符(以及其他更晦澀的字符),則將它們跳過,但是如果沒有,則沒有問題空白空間。 還要注意,無論如何,唯一不跳過空格的轉換說明符是%c%[...]%n 所有其他轉換說明符會自動跳過空格。

您可能應該使用" %c" 這意味着“跳過空白,然后返回非空白字符”。 或者,根據您的代碼,您可以簡單地使用"%c" ,甚至更好:

int c;
while ((c = getchar()) != EOF)
{
    if (isalpha(c)
        sum++;
}

如果要輸入方向,請不要使用scanf()fscanf() 使用fgets()getline()然后使用sscanf()

順便說一下,這些行:

else
    sum = sum;

毫無意義。 編譯器可能會優化它們,但是不應強迫其他人閱讀它們並為您的想法感到困惑。

用戶是否應該在每個字符之間按ENTER鍵? 您的格式字符串"%c\\n"表示應該這樣做,但是您的問題說明中卻相反。 嘗試刪除\\n

其他要點:

  • scanf()返回已解析和分配的項目數。 您應該始終檢查此退貨以確保分配了預期的項目數。
  • 以下代碼毫無意義,應將其刪除:
    else
        sum = sum;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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