在C控制台程序中读取完整行的最简单方法是什么?输入的文本可能具有可变长度,我们无法对其内容进行任何假设.
这有很大的麻烦......
printf("> ");
int x = getchar();
printf("got the number: %d", scanf("%d", &x));
Run Code Online (Sandbox Code Playgroud)
> 1234
got the number: 1
Run Code Online (Sandbox Code Playgroud) 问题:尝试对来自我创建的typedef结构(电话簿)的数组进行排序.
目标:尝试构建一个允许用户添加,删除,排序和打印电话簿的电话簿.
我在哪里:除了排序外,我的一切都在运作.我通过阅读各种网络论坛/示例拼凑了一个排序函数,但无法让它工作.
我遇到的问题:添加条目(工作正常)后,如果您尝试对条目进行排序,该函数会将这些条目的值清零,当您打印电话簿时,它会将所有条目显示为空白.它应按姓氏的字母顺序排序.
这是我的排序算法:
void Sort (phone phonebook[])
{
phone temp;
int i; int j;
for (i=0; i<19; i++)
{
for (j=i+1; j<19; j++)
{
if (strcmp(phonebook[i].Surname, phonebook[j].Surname) > 0)
{
temp=phonebook[i];
phonebook[i]=phonebook[j];
phonebook[j]=temp;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
完整代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//typedef struct to define what's in the phonebook
typedef struct PhoneBookContacts
{
char Name[20];
char Surname[20];
char PhoneNumber[20];
} phone;
//Function prototypes
void AddEntry (phone[]);
void DeleteEntry (phone[]);
void …Run Code Online (Sandbox Code Playgroud) 输入包含一个字符串和一个整数,由a分隔'/',如下所示:
hello/17
Run Code Online (Sandbox Code Playgroud)
我想把输入读成一个字符串和一个int,像这样:
char str[20];
int num;
scanf("%s/%d", str, &num); // this how I tried to do it.
Run Code Online (Sandbox Code Playgroud)
我似乎无法做到,有什么建议吗?
我需要做以下事情:
int main(void) {
char a,b,cstring;
printf("please enter something");
scanf("%c %c",&a,&b);
prinf("thanks, now some more");
fgets(cstring,35,stdin);
}
Run Code Online (Sandbox Code Playgroud)
问题是每当我从scanf输入第一个变量时,它都会跳到程序的末尾.我该如何做多个输入?
如何使用scanf验证用户输入.现在我有类似的东西,但不起作用.
注意:我有atoi只是为了验证scanf验证是否有效.
scanf("%[0987654321.-]s",buf);
i = atoi(buf);
if(i)
index = i;
Run Code Online (Sandbox Code Playgroud) 我无法在这里刷新stdin,有没有办法刷新stdin?如果没有,那么如何让getchar()从用户输入一个字符作为输入,而不是输入缓冲区中scanf留下的"\n"? ?
#include "stdio.h"
#include "stdlib.h"
int main(int argc,char*argv[]) {
FILE *fp;
char another='y';
struct emp {
char name[40];
int age;
float bs;
};
struct emp e;
if(argc!=2) {
printf("please write 1 target file name\n");
}
fp=fopen(argv[1],"wb");
if(fp==NULL) {
puts("cannot open file");
exit(1);
}
while(another=='y') {
printf("\nEnter name,age and basic salary");
scanf("%s %d %f",e.name,&e.age,&e.bs);
fwrite(&e,sizeof(e),1,fp);
printf("Add another record (Y/N)");
fflush(stdin);
another=getchar();
}
fclose(fp);
return 0;
}
编辑: - 更新的代码,仍然无法正常工作
#include "stdio.h"
#include "stdlib.h"
int main(int argc,char*argv[]) {
FILE *fp;
char … 每个C程序员都知道gets除非标准输入连接到可信源,否则无法安全使用.但是为什么C的开发人员在成为C标准的正式部分之前没有注意到这样一个明显的错误?为什么要在C11中将其从标准中删除并用一个执行边界检查的函数替换它?我知道fgets它通常用于它的位置,但这有一个令人讨厌的习惯,就是保持\n最后的状态.
在unix plain C termios编程中,如果我使用规范模式从用户接收一行输入,我该如何处理转义键?通常,如果用户正在输入一行文本并按下转义,则不会发生任何事情.如果用户按下escape,我想取消当前输入.我知道我可以处理单个字符,但后来我失去了规范模式(退格等)的所有好处.
我在文件Eg中有几行整数
100 20 300 20 9 45 -1
101 80 80 2 80 2 50 3 70 -1
Run Code Online (Sandbox Code Playgroud)
我想读取前2个字符并将它们存储在整数变量中,然后将其余字符存储在一个字符串中,我可以稍后迭代.
do {
fscanf(file, "%d %d", &var1,&var2);
}while(!feof(file));
Run Code Online (Sandbox Code Playgroud)
现在我想扫描剩余的线,移动到下一行并重复.但我不知道如何将其余部分扫描成var3字符串
..有任何想法吗?