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