- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
好吧,我一直在看 Bucky Robert 的 C 编程教程,他给观众的第一个任务是制作一个程序来检查密码是否至少有一个大写字符、一个数字和一个美元符号。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
int main()
{
int upper = 0;
int digit = 0;
int dollar = 0;
char password[16];
int loop = 1;
while(loop == 1){
printf("Enter your password: ");
scanf(" %s", password);
int i;
for(i = 0; i <= 16; i++){
printf(" %c", password[i]);
if(isupper(password[i])){
upper = 1;
printf("\t is upper");
}
if(isdigit(password[i])){
digit = 1;
printf("\t is digit");
}
if(password[i] == '$'){
dollar = 1;
printf("\t is dollar");
}
printf("\n");
}
if((upper == 1) && (digit == 1) && (dollar == 1)){
printf("Your password is valid\n");
loop = 0;
} else {
printf("Your password is invalid\n");
}
}
return 0;
}
程序在输入“P4sswoRd”后在控制台中打印:
Enter your password: P4sswoRd
P is upper
4 is digit
s
s
w
o
R is upper
d
╨
@
ö
`
$ is dollar
Your password is valid
我输入的所有密码都不包含“$”字符,但程序仍能找到检测它的方法。它在字符后打印“is digit”或“is dollar”的原因是检查代码中出了什么问题并查看为什么密码都是有效的。我不知道为什么会打印所有这些随机字符,我宁愿知道我的程序出了什么问题,也不愿采用新方法来完成手头的任务。
最佳答案
这个循环是错误的:
for(i = 0; i <= 16; i++){
如果您只输入 4 个字符,您应该只检查字符串的前 4 个字符。这就是您看到大量随机字符的原因——这些是 password
剩余元素中的垃圾。 .应该是:
size_t pw_len = strlen(password);
for (i = 0; i < pw_len; i++) {
此外,请记住,由于数组是从零开始的,因此数组的最后一个元素的索引长度为 1。因此,如果您确实想处理声明为 password[16]
的数组的所有元素, 循环标准应该是 i < 16
, 不是 i <= 16
-- 将在最后一次迭代时尝试访问数组外部。
您还需要初始化 upper
, digit
, 和 dollar
while
开头的变量环形。否则,如果您键入包含数字和 $
的密码, 然后是一个大写的新密码,第二个密码将被称为有效,因为它仍然有 digit
和 dollar
以前密码的设置。
所以应该是:
while(loop == 1){
upper = digit = dollar = 0;
关于c - Bucky Robert 的第一个任务,使用 isupper()、isdigit() 验证密码,并包含一个 '$' 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41513464/
以下文本来自 Robert Sedwick 的算法书中的快速排序部分。 通过选择数组的左、中、右三个元素,我们可以将哨兵合并到这个方案中。对三个元素进行排序,然后在中间与a[r-1]交换一个,然后在a
我正在考虑实现 Robert Martin 的 Clean Architecture在一个项目中,我试图找出如何处理非平凡用例。 我发现很难将架构扩展到复杂/组合的用例,尤其是参与者是系统而不是用户的
在这种情况下,我需要在 .Net 中创建一个可以从 delphi 程序调用的非托管 DLL。我一直在做一些研究,并找到了 Robert Giesecke 的库 (RGiesecke.DllExport
我想知道寻边“罗伯茨交叉运算符”背后的概念 - 它是如何工作的?如何实现? (请不要使用代码;我想自己编码。) 最佳答案 您遍历源图像中的每个像素,并根据源像素及其东、南和东南相邻像素的值计算目标图像
首先,我在 2D 平面中实现了普通的、缓慢的 Poisson Disk Sampling 算法,它工作得很好。这个慢速版本会计算所有点之间的距离,并检查您希望放置的点与所有其他点之间的距离是否至少为
我正在阅读 Robert Sedgewick 写的关于算法的书。 public static void sort(Comparable[] a) { // Sort a[] into increa
我正在尝试实现 Clean Architecture由罗伯特·马丁描述。更具体地说,我正在使用 VIPER这是 Clean Architecture 的 iOS 版本。 我遇到的问题如下: 用户开始查
根据经验,这本书对于学习算法创建有多好? 最佳答案 我看过的最常见的算法书是Cormen, Leiserson, Rivest, and Stein's Introduction to Algorit
我正在阅读 Robertsedwick 的 C++ 排序算法 Property 1: Insertion sort and bubble sort use a linear number of com
我尝试使用 line_profiler 模块来获取 Python 文件的逐行配置文件。这是我到目前为止所做的: 1) 从 pypi 安装 line_profiler通过使用 .exe 文件(我在 Wi
我已经使用 np.fft 在 Python 中实现了信号处理 FFT 算法(太简单了)。现在我正在使用整数算法在 C 中完成此操作。经过一番研究,我发现互联网上最流行的 C 整数 FFT 库之一是 R
我已经成功使用了 Roberts UnmanagedExportLibrary.zip从 Delphi 2007 调用 .NET 2/3.5 程序集。 但是,当我使用 VS2010 将 C# 程序集重
对于新手问题,我深表歉意。我正在尝试在 Robert Sedgewick 和 Kevin Wayne 的第 4 版算法书中给出的 Eclipse 中运行 Java 程序:https://algs4.c
所以,最近,出于好奇,我买了 CLRS 的《算法导论》一书。当我开始阅读这本书时,我注意到书中一些非常典型的算法是以非常不同的方式实现的。 给定 CLRS 的快速排序实现与流行的快速排序 Hoare
我尝试使用 Robert Giesecke 的非托管导出在 C# (VS2010) 中创建非托管 dll。这是我的测试代码: using RGiesecke.DllExport; namespace
我们在 Delphi 应用程序中使用 Robert Giesecke 出色的非托管导出库已经有一段时间了。我们刚刚升级到 Visual Studio 2015,它似乎不再工作了——我可以在 VS201
我阅读了 Robert Martin 关于接口(interface)隔离原则的文章 here .在文章的最后,在解决 ATM UI 架构的问题时,他说: Consider also that each
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我刚刚提出并获得了我的问题的答案:“无法使用非托管导出返回自定义类型实例 (Robert Giesecke)”-> can't return custom type instance with unm
这是一个关于函数只做一件事的概念的问题。如果没有一些相关的上下文上下文就没有意义,所以我会在这里引用它们。它们出现在第 37-38 页: To say this differently, we wan
我是一名优秀的程序员,十分优秀!