想为银行制作c程序应用程序

时间:2015-07-24 15:50:09

标签: c

我已经制作了这个结构,但是我已经陷入了必须执行if / else编码的最后一点。这是我的第一个程序,在网上使用了一些教程。

代码如下:

$('.tb-two').hide(); //if tabtwo is empty
$('.tb-hree').hide(); //if tabthree is empty
 and so on...

3 个答案:

答案 0 :(得分:1)

您正在从控制台读取字符串。如果我理解,一个简单的方法是只检查字符串中的第一个字符。你可以这样做:

if ( (pbprint[0] == 'Y') || (pbprint[0] == 'y') )
{
    printf("your printing is done");
}
else
{
    printf("your printing is not done");
}

用户通常非常有创意,因此您可以选择输入界面的智能和多功能性。

答案 1 :(得分:1)

首先将变量声明从char更改为char array,因为您希望输入字符串。我正在考虑最大值你将在字符串中输入19个字符,所以变量声明将如下所示:

char fName[20];
char mName[20];
char lName[20];
char pbprint;    // This is just character as you want single character input

您可以更改您的服用字符输入,如下所示:

printf("\n\n\nWould You Like Us To Print Your Passbook [Y/N] : ");
scanf(" %c",&pbprint);  // Notice whitespace in the format string

if((pbprint == 'Y') || (pbprint == 'y'))    //  now you can do single character comparison
{
    printf("Yes");      
}
else
{
    printf("No");       
}

我希望这可以帮助你进行单字符输入

答案 2 :(得分:1)

问题#1:您需要留出空间来存储字符串数据。 char数据类型仅为单个字符值('A',{{1}分配空间等等)。 字符串'j'值的序列,后跟一个0值字节,因此您需要将char数组放在一边足以容纳一个名称加上0终止符。

因此,您的名称变量需要声明为char数组

char

要使用#define NAME_LEN 30 // make this as big as you need char fName[NAME_LEN + 1]; // Add a space for the 0 terminator char mName[NAME_LEN + 1]; char lName[NAME_LEN + 1]; 阅读这些内容,您需要编写

scanf

scanf( "%s", fName ); // note no & operator 转换说明符期望其对应的参数是指向%s数组的第一个元素的指针。在大多数情况下,数组表达式(例如上面调用中的char)将自动转换为指针,因此您不需要使用{{1}在这种情况下运算符。

为安全起见,您应该检查fname电话的结果;它将返回成功转换和分配的数量(如果没有转换成功,则返回0),如果它看到文件结束或错误情况,则返回&。您还应指定转换说明符中要读取的最大字符数;否则,如果您键入的字符数超过目标数组的大小以容纳,scanf将很乐意尝试将这些额外字符存储在数组末尾的内存中,从而导致从损坏的数据到碎片堆栈的任何内容彻底崩溃:

EOF

不幸的是,长度必须是"硬编码"进入转换说明符。您可以使用一些不太直观的预处理器宏来解决这个问题:

scanf

然后你可以写点像

if ( scanf( "%30s", fName ) == 1 ) // expect one successful conversion and assignment
{
  // successfully read fName
}
else
{
  // problem during read
}

将扩展到

#define S2(x)   #x           // surrounds x with double quotes
#define S1(x)   S2(x)        // causes x to be expanded before being passed to S2
#define E1(x)   x            // causes x to be expanded
#define FMT(x)  S1(%E1(x)s)  // writes a %xs conversion specifier, where
                             // x is the max length

if ( scanf( FMT(NAME_LEN), &fName ) == 1 ) if ( scanf( "%30s", &fName ) == 1 ) 宏看起来多余,但它们是必要的;你想"扩展"在将S2运算符应用于它之前的参数E1。如果我们写了

x

它会扩展到

#

这不是我们想要的。

问题#2:简单地声明指针不会为你指向的东西留出存储空间。声明

#define S1(x) #x
#define FMT(x) S1(%xs)
...
if ( scanf( FMT(NAME_LEN), &fName ) == 1 )

创建指针变量if ( scanf( "%xs", &fName ) == 1 ) ,但它没有为我们想要指向的东西分配任何内存。在此特定情况下,如果您要存储的所有内容均为char * pbprint; pbprint值,则将y声明为常规n并使用pbprint进行阅读转换说明符,如下所示:

char

需要%c转换说明符之前的前导空格来跳过输入流中的任何前导空格;否则,您冒险从前一个条目中获取换行符,这不是您想要的。

我们还使用#include <ctype.h> ... char pbprint; ... if ( scanf( " %c", &pbprint ) == 1 ) // note leading blank in format string { if ( tolower( pbprint ) == 'y' ) // convert to lower case for comparison { // show print output } else { // don't show print output } } else { // error on input } 库函数(在%c中声明)将输入字符转换为小写以进行比较。这样我们就不必为小写和大写字母编写不同的分支。