C语言中字符的输入输出以及计算字符个数的方法详解

2020-01-06 14:06:26王冬梅

该字符计数程序使用 long 类型的变量存放计数值,而没有使用 int 类型的变量。long整型数(长整型)至少要占用 32 位存储单元。在某些机器上 int 与 long 类型的长度相同,但在一些机器上,int 类型的值可能只有 16 位存储单元的长度(最大值为 32767),这样,相当小的输入都可能使 int 类型的计数变量溢出。转换说明%ld 告诉 printf 函数其对应的参数是 long 整型。

使用 double(双精度浮点数)类型可以处理更大的数字。我们在这里不使用 while 循环语句,而用 for 循环语句来展示编写此循环的另一种方法:


#include <stdio.h>

/* count characters in input; 2nd version */
main()
{
 double nc;
 for (nc = 0; getchar() != EOF; ++nc)
 ;
 printf("%.0fn", nc);
}

对于 float 与 double 类型。printf 函数都使用%f 进行说明。%.0f 强制不打印小数点和小数部分,因此小数部分的位数为 0。

在该程序段中,for 循环语句的循环体是空的,这是因为所有工作都在测试(条件)部分与增加步长部分完成了。但 C 语言的语法规则要求 for 循环语句必须有一个循环体,因此用单独的分号代替。单独的分号称为空语句,它正好能满足 for 语句的这一要求。把它单独放在一行是为了更加醒目。

在结束讨论字符计数程序之前,我们考虑以下情况:如果输入中不包含字符,那么,在第一次调用 getchar 函数的叫候,while 语句或 for 语句中的条件测试从一开始就为假,程序的执行结果将为 0,这也是正确的结果。这一点很重要。whi1e 语句与 for 语句的优点之一就是在执行循环体之前就对条件进行测试,如果条件不满足,则不执行循环体,这就可能出现循环体一次都不执行的情况。在出现 0 长度的输入时,程序的处理应该灵活一些,在出现边界条件时,while 语句与 for 语句有助于确保程序执行合理的操作。

连接两个字符串的程序:


#include <stdio.h>
#include <string.h>
void main()
{
 int i;
 char str1[30]="welcome to ";
 char str2[]= "www.nowamagic.net";
 printf("%sn",strcat(str1,str2));
 scanf("%d", &i);
}

在MFC下实现计算字符串的程序:


void CNowaMagic_MFCDlg::OnBnClickedOk()
{
 // TODO: 在此添加控件通知处理程序代码
 //CDialogEx::OnOK();
 //获得EDIT 
 CEdit* pBoxOne; 
 pBoxOne = (CEdit*) GetDlgItem(IDC_EDIT1); 

 CString str;
 CString sStrLen; 
 char tmp[10] = "";

 pBoxOne-> GetWindowText(str); 
 int nStrLen = str.GetLength();
 sStrLen = itoa(nStrLen,tmp,10);
 CString str2 = _T("字符数为:");

 MessageBox(str2 + sStrLen,_T("程序运行结果"),MB_OK);
 str.ReleaseBuffer();
}