Tag: scanf

C Scanf突然停止读取数值

我正试图在我的Mac上运行一个简单的C程序。 它工作正常一段时间但突然scanf停止工作。 我基本上想要读取整数值并输出输入的内容。 无论我输入的整数,程序都保持输出0.我已经尝试了这里的建议,但没有任何作用。 我已尝试在终端和xcode中运行程序,但仍然没有。 有任何想法吗? #include int main(){ int numberOfElements = 0; scanf(“Number of elements: %d”,&numberOfElements); printf(“%d\n”,numberOfElements); //keeps returning 0 no matter the number I enter return 0; }

scanf在C中运行不正常

if (a % 5) goto ask; else goto main; ask:printf(“Do You Want To Exit ? Y \\ N . . . \n”); scanf(“%c”, &YN); getch(); if (YN == ‘Y’) { y: system(“cls”); YN = 1; goto sign; } else if (YN == ‘y’) goto y; else if (YN == ‘N’) { n: system(“cls”); YN = […]

scanf(“% s”,a)vs得到(a)

我被告知当用户输入字符串时不应使用scanf。 相反,大多数专家和StackOverflow上的用户都可以使用gets()。 我从来没有在StackOverflow上问过为什么不应该使用scanf over gets for strings。 这不是实际问题,但非常感谢回答这个问题。 现在来到实际的问题。 我遇到过这种类型的代码 – scanf(“%[^\n]s”,a); 这将读取一个字符串,直到用户输入一个新的行字符,同时将空格也视为字符串。 如果我使用有任何问题 scanf(“%[^\n]s”,a); 而不是得到? 得到比scanf函数更优化,听起来,gets纯粹专门处理字符串。 请让我知道这件事。 更新 这个链接帮助我更好地理解它。

当我输入一个十进制而不是一个int到“scanf(”%i“,&int)”时,会发生什么?

我的程序提示用户输入20个整数值,然后计算这些值的平均值。 我输入了以下内容:3.5,6,9,12,15,18,21,24,1000,4500,900,7,8,2,12,5,4,3,2,1 除第一个数字外,所有都是整数值,但程序告诉我平均值是3.000000。 为什么会发生这种情况呢? 我解释的最大原因是我对每个值的scanf函数提示输入一个整数,因此输入3.5会四舍五入为3或4,但这仍然无法解释结果均值为3.000000。 #include int main(void) { int count, value; double avg, sum; count = 0; sum = 0; avg = 0; while (count = 0) { sum = sum + value; count = count + 1; } else { printf(“value must be positive”); } } avg = sum / count; printf(“Average is […]

Scanf解析字符串输入到字符数组

我想在2个独立的数组中解析用户输入(使用scanf)。 g ++编译没有错误,但我得到一个内存访问错误(核心转储)。 (德语:“Speicherzugriffsfehler(Speicherabzug geschrieben)”) char *top[10]; char *bottom[10]; for(i = 0; i < 5; i++){ printf("Karte %d: Obere Werte? ", i ); scanf( "%s", top[i] ); printf( "Karte %d: Untere Werte? ", i); scanf( "%s", bottom[i] ); } 这有什么问题? 我尝试使用带有temp-var的”stringcpy” (“stringcpy(top[i], temp)”) ,但它也不起作用。 有什么建议?

使用fscanf读取指针时的分段错误(核心转储)

我正在尝试使用fscanf来读取和打印屏幕上的每个字符,但是当我运行程序时,我遇到了分段错误(核心转储)。 这是我的代码: #include main(int argc, char * argv[]) { int *a ; FILE *input; if (argc>=2) { input= fopen(argv[1],”r”); if (input!=NULL) { while (feof(input)==0) { fscanf(input,”%d\n”,a); printf(“%d\n”,*a); } fclose(input); } else { printf(“Error!\n”); } } } 我提供文件作为参数,如下所示: ./myprog input.txt 文件input.txt包含: 23 47 55 70

scanf和strcmp with c string

我找到了一个很好的例子 ,说明如何使用strcmp,但它只适用于fgets(),我需要使用scanf。 所以,这是代码: int main(void) { char fruit[] = “apple\n”; char ans[80]; do { printf (“Guess my favorite fruit? “); scanf (“%s”,ans); } while (strcmp (fruit, ans) != 0); puts (“Correct answer!”); return 0; } 即使我写了正确的answear(“苹果”),它仍然留在循环中并一直问我最喜欢的水果……我猜它与没有写在ans [80]的字符有关。 (我需要它是一个最多80chars的char数组)。 我不是这个…… 提前致谢。

使用“D”代替“E”读取ASCII数字用于科学记数法

我有一个数字列表,如下所示: 1.234D+1或1.234D-02 。 我想用C读取文件。函数atof只会忽略D并只翻译尾数。 函数fscanf将不接受格式’%10.6e’因为它期望指数中的E而不是D 当我在Python中遇到这个问题时,我放弃了,只是在从string转换为float之前使用了字符串替换。 但在C中,我确信必须有另一种方式 。 那么,对于科学记数法,您如何使用D而不是E来读取带有数字的文件? 请注意,我并不是指如何读取字符串本身,而是如何将它们转换为浮点数。 谢谢。

scanf的差异(“%”,名称); 和scanf(“%”,名称);

这不是一个错字。 对于没有注意到的人,第二个上有一个空间,第一个上没有空格。 当我做这样的作业时,它发生在我身上: #include int main(){ int id,d,m,y; char name[30]; printf(“\tSTUDENT ID\t\t: “);scanf(“%d”,&id);\ printf(“\tNAME\t\t: “);scanf(“%[^\n]”,&name); printf(“\tDATE OF BIRTH\t: “);scanf(“%d/%d/%d”,&d,&m,&y); } 当我执行该代码时,“NAME”部分跳过输入“DATE OF BIRTH”部分 但是,当我更改scanf(“%[^ \ n]”,&name); 到scanf(“%[^ \ n]”,&name); 一切正常。 怎么会发生这种情况? 我似乎不明白这些差异 注意:您可以尝试一下,并告诉我它是否可以正常使用,可能只是因为我的计算机问题或其他原因

ASM x64 scanf printf double,GAS

我无法弄清楚为什么这段代码对我不起作用。 我需要使用scanf函数用于double,然后printf用于相同的double。 使用此代码时结果不佳。 我看到的是相当随机的字符。 .data d1: .double format: .asciz “%lf\n” format2: .asciz “%lf” .text .globl main main: subq $8, %rsp #scanf movq $0, %rax movq $d1, %rsi movq $format2, %rdi call scanf addq $16, %rsp #printf movq $1, %rax movsd d1, %xmm0 movq $format, %rdi call printf addq $16, %rsp #exit movq $1, %rdi xorq […]